% macropackage=lplaing

% F"ur das Format DIN-A5 (vergr"o"sert ausgedruckt auf DIN-A4) sind die
% Zeilen mit "%A5" am Anfang einzuschalten.

\documentstyle[twoside,german,mflogo,a4-9,oldlfont]{report}
%A5 \documentstyle[twoside,german,mflogo,a4,12pt,oldlfont]{report}
\pagestyle{headings}
%
\newfont{\mc}{cmr9} % medium caps
\newfont{\bmc}{cmbx9} % bold medium caps
%A5 \newfont{\mc}{cmr10 scaled \magstephalf} % medium caps
%A5 \newfont{\bmc}{cmbx10 scaled \magstephalf} % bold medium caps
%
\newcommand{\inimf}{{\mc INIMF}}
\newcommand{\gem}{{\mc GEM}}
\newcommand{\tos}{{\mc TOS}}
\newcommand{\gemdos}{{\mc GEM}\-{\mc DOS}}
\newcommand{\bs}{$\backslash$}
\newcommand{\env}[1]{{\mc #1}}
\newcommand{\benv}[1]{{\bmc #1}} % bold env. variable
\newcommand{\file}[1]{{\tt\uppercase{#1}}}  % file name
\newcommand{\bfile}[1]{{\tt\uppercase{#1}}} % bold file name


%
% Wenn kein "New Font Selection Scheme" (NFSS von Mittelbach/Sch"opf)
% installiert ist, dann mu"s man die Styleoption mflogo aus dem
% \documentstyle rausschmei"sen, die folgenden Definitionen durch
% Entfernen des % aktivieren und darf sich dann dar"uber "argern, da"s
% alle METAFONT-Logos genau gleich gro"s sind, egal, ob sie nun auf der
% Titelseite oder im laufenden Text erscheinen. Wer alte Versionen meiner
% METAFONT-Anleitung kennt, wei"s, da"s dort u.a. bei jeder "Uberschrift, die
% das METAFONT-Logo enth"alt, alle m"oglichen Tricks veranstaltet werden
% mu"sten, um in der "Uberschrift selbst, im Inhaltsverzeichnis und in der
% Kopfzeile auf jeder Seite das Logo im jeweils passenden Schriftschnitt
% anzuw"ahlen. Genau dies ist nun mit dem NFSS nicht mehr n"otig (an dieser
% Stelle auch mal ein gro"ses Dankesch"on an Frank Mittelbach und Rainer Sch"opf
% f"ur ihre riesige Arbeit).
%
% Zur Information: NFSS ist eine Style-Option, die die Fontauswahl von
% LaTeX komplett durch eine neue ersetzt. NFSS ist eine Vorarbeit zu neuen
% LaTeX-Versionen (2.10 oder irgendwann 3.0), um jetzt schon mit einigen
% der neuen M"oglichkeiten arbeiten und experimentieren zu k"onnen. Mit NFSS
% ist es erheblich leichter, neue Fontfamilien (z.B. Pandora-Fonts, AMS-
% Fonts, diverse PostScript-Fonts, oder eben Logos in verschiedenen Gr"o"sen
% und Schnitten) in ein Dokument einzubinden. In bisherigen LaTeX-Versionen
% mu"ste man dazu immer lfonts.tex "andern, wenn die neuen Fonts auch automa-
% tisch ihre Gr"o"se "andern oder z.B. fett erscheinen sollten. Hinzu kam dann
% nat"urlich noch das Erzeugen einer neuen Format-Datei mit IniTeX...
%
% Ein weiterer Vorteil von NFSS ist die Entkopplung der Fontauswahl von
% der Gr"o"senangabe. In LaTeX 2.09 schaltet "\bf\large" nicht etwa auf eine
% gro"se Fettschrift um, sondern auf gro"se "Normalschrift" (Roman) um, weil
% die Gr"o"senauswahl automatisch auch eine Fontauswahl beinhaltet ("\large\bf"
% liefert das Gew"unschte). Au"serdem ist mit NFSS die Fontauswahl nicht ein-
% dimensional, sondern bietet drei voneinander unabh"angige Parameter (wenn
% man von der Gr"o"senangabe mal absieht): family, series und shape, z.B.
% "Computer Modern/medium/normal = cmr" oder "Computer Modern/bold extended/
% italic = cmbxti", oder nat"urlich auch "METAFONT-Logo/bold extended/normal
% = logobf". Man kann nun mit NFSS einstellen, ob man kompatibel zur alten
% LaTeX-L"osung sein will (und damit auch fast alle alten Dokumente ohne
% Probleme "ubersetzen kann), oder ob man die neuen M"oglichkeiten nutzen
% m"ochte, und z.B. mit "\bf\it\large" auf einen fetten, kursiven (!) Schrift-
% schnitt in beispielsweise 12 Punkt Gr"o"se umschaltet. In diesem Fall mu"s
% man ggfs. bei alten Dokumenten ein "oldlfont" bei den Styleoptionen (in
% den eckigen Klammern bei \documenstyle) angeben.
%
% Leider ist auf den beiden METAFONT-Disketten nicht mehr gen"ugend Platz,
% um das NFSS (auf Platten und Disketten meist unter dem Namen "fontsel"
% zu finden) mitzuliefern. Wer es noch nicht besitzt, kann bei mir die
% Diskette 220 (TeX-Makros) oder 020 (AMS-Fonts + NFSS) bestellen (siehe
% Datei DISKLIST.DOC), oder sich das NFSS bei Dante oder bei Stefan Lind-
% ner besorgen oder von einem der vielen per Modem oder Datennetz erreich-
% baren TeX-Server (rusinfo in Stuttgart, dhdurz1 in Heidelberg, Stefan
% Lindners Bagdad-TeX-Server) kopieren.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% \newfont{\logo}{logo12}
% \newcommand{\mf}{{\logo META}\-{\logo FONT}}
%

\hfuzz 1.3pt  % Soviel darf es schon mal "uber den rechten Rand hinausragen
\emergencystretch 3pt % diese Zeile l"oschen, falls noch kein TeX >= 3.0!
\setcounter{secnumdepth}{1} % Nur bis \section durchnumerieren
\setcounter{tocdepth}{1}    % Im Inhaltsverz. nur \chapter und \section

\hyphenation{back-slash byte bytes da-tei-na-men}
%
\begin{document}
%
%******************************* Titelseite ********************************
%
\title{{\Huge\mf} \\[1.5cm]
  {\normalsize (Version%
  \thanks{Die erste Versionsnummer ist die offizielle Z"ahlung von
   Donald~E.~Knuth, die zweite bezeichnet die aktuelle Implementation
   auf dem Atari~ST}
  2.7 / 2.2)} \\[1.5cm]
 Bedienungsanleitung}
\author{Lutz Birkhahn}
\date{April 1992}
\maketitle
%**************************** 2. Seite (Copyright) *************************
\begin{titlepage}
\noindent Diese Anleitung darf von jedermann kopiert oder ausgedruckt werden,
solange damit keine kommerziellen Interessen verbunden sind.
\vfill
\raggedright
Sechste Auf"|lage.\\
April 1992\\
\end{titlepage}

%***************************** Inhaltsverzeichnis **************************
%
\tableofcontents
%
%******************************* Einfuehrung ********************************
%
\chapter{Einf"uhrung}

Im f"unfzehnten Jahrhundert wurde das erste mal versucht, Buchstaben auf
mathematischem Wege zu erzeugen. Nach einer Bl"utezeit im sechzehnten und
siebzehnten Jahrhundert wurde diese Methode im achtzehnten Jahrhundert
aufgegeben, die Ergebnisse waren einfach zu schlecht. Erst seitdem
in der heutigen Zeit
Computer die Berechnungen schnell und exakt durchf"uhren k"onnen (auch
die Mathematik ist w"ahrend dieser Zeit nicht stehen geblieben), scheint
es m"oglich und vielleicht auch lohnend zu sein, die Mathematik zur
Erzeugung von Buchstaben zu verwenden.

Der bekannte Mathematiker und Informatiker Donald~E.~Knuth hat sich seit
1977 mit dem weiten Gebiet der Typographie besch"aftigt, nachdem er die
ersten mit Computerhilfe hergestellten Drucke seiner Buchreihe
"`The Art of Computer Programming"' gesehen hatte. Die erste Auf"|lage
dieser Buchreihe war noch im Bleisatzverfahren hergestellt worden, und Knuth
war nach einem Vergleich des damals noch neuen Computersatzes mit den
herk"ommlichen Druckverfahren so entt"auscht von der neuen Technik, da"s er
sich seine eigenen Gedanken "uber Typographie in Verbindung mit Computern
machte. Ergebnisse dieser Forschungsarbeiten waren das Schriftsatzprogramm
\TeX 78 und \mf 79, ein Programm f"ur den Entwurf von Schriften f"ur
rasterorientierte Ausgabeger"ate mit mathematischen Mitteln. Nach einigen
Jahren Erfahrung mit diesen beiden Programmen hat er 1982 eine neue
Version von \TeX\ und 1984 ein neues \mf\ geschrieben.
\mf\ entwickelte er praktisch vollkommen neu, nachdem sich gezeigt hatte,
da"s der bisherige Ansatz erhebliche Schw"achen aufwies.

Dieses neue \mf\ (und auch das neue \TeX) hat Knuth in der von ihm
erdachten, Pascal-"ahnlichen Sprache {\mc WEB} formuliert und in Buchform
\cite{mfprog,texprog}
ver"offentlicht. Das eigentlich neue an {\mc WEB} ist die Kombination von
Programm und Dokumentation in {\it einer\/} Datei, wof"ur Knuth den Begriff
"`Literarisches Programmieren"' eingef"uhrt hat\cite{web}.
Und in der Tat sind die
Programme fast so gut lesbar wie ein Roman, und sie verdeutlichen,
was Knuth von der "`Kunst, zu programmieren"' versteht. Mein Dank geht an
Knuth, da"s er seine Kunst nicht nur theoretisch in den B"uchern
"`The Art of Computer Programming"' ver"offentlicht, sondern sie
auch praktisch in den Programmen \TeX\ und \mf\ vorgef"uhrt hat.

Angesichts dieser gro"sen Leistungen war es f"ur Stefan Lindner und mich
-- als wir im Fr"uhling 1987 auf diese Programme stie"sen -- klar, da"s
wir sie f"ur den Atari~ST implementieren wollten, und da"s die angepa"sten
Programme als Share\-ware verbreitet werden sollten. Wegen der Form von
WEB-Dateien und der Tatsache, da"s wir beide keine gro"sen Freunde von
Pascal sind, kam uns beiden sofort der Gedanke, die Programme in die
Programmiersprache C zu "ubersetzen. Also besorgten wir uns die entsprechenden
B"ucher von Knuth, und tippten sie ab, wobei wir die Programme gleich in
C "ubersetzten. Stefan implementierte \TeX, w"ahrend ich mich auf
\mf\ st"urzte. Nach "uber einem Jahr Tippfehlersuche und Ausprobieren
verschiedener C-Compiler waren im Sommer 1988 erste brauchbare Ergebnisse
zu sehen. Inzwischen hat sich Turbo~C von Borland/Heimsoeth als der am besten
geeignete Compiler herausgestellt, und es konnten noch einige Verbesserungen
an der Benutzer\-ober\-fl"ache von \TeX\ und \mf\ vorgenommen werden. Die
vorliegenden Versionen von \mf\ und \TeX\ sind das Ergebnis der
langen Bem"uhungen, Knuths Programme f"ur Besitzer von Atari~ST Computern
zug"anglich zu machen. Beide sind {\tt TRAP}- bzw.\ {\tt TRIP}-getestet,
haben also nachgewiesen, da"s sie sich auch bei "`unm"oglichen"' Eingaben
genau wie die Originale verhalten.

\vfill
%
%------------------------------ Der Autor ----------------------------------
%
\section{Der Autor}
An dieser Stelle m"ochte ich mich ganz kurz vorstellen. Geboren bin ich
anno 1963 (zuf"alligerweise erhielt Donald Knuth in diesem Jahr auch seinen
Doktortitel in Mathematik vom California Institute of Technology), und
entdeckte schon in der Schule mein Interesse f"ur Computer, zun"achst an
einem Tischrechner von WANG, der noch mit einem richtigen Kernspeicher
ausgestattet war, und bei dem man mit Hilfe einer teuren Zusatztastatur
sogar Buchstaben~(!) eingeben konnte, wenngleich diese auch nur selten
richtig im Rechner ankamen. Nach diversen Zwischenschritten (CBM 3000,
AIM-65, mein erster eigener Computer, und \hbox{C-64}) wurde ich 1985 schlie"slich
stolzer Besitzer eines Atari~ST. Neben \mf\ bin ich zur Zeit auch noch
mit einem Informatik-Studium besch"aftigt.

Meine derzeitige Adresse ist:\label{adr}
\begin{verse}
   Lutz Birkhahn\\
   F"urther Str.\ 6\\
   W-8501 Cadolzburg 2\\
   Deutschland\\[0.5\baselineskip]
   Telefon: 0\,91\,03 / 28\,86
\end{verse}

Wer seine Registrierungsgeb"uhr zahlen m"ochte (Spenden werden
nat"urlich auch angenommen), "uberweist den Betrag am besten auf eines
der folgenden Konten:
\begin{quote}
   Kontonr.~3062\,25-852 beim Postgiroamt N"urnberg, BLZ~760\,100\,85

   Kontonr.~533\,45\,37 bei der Vereinigten Sparkasse im Landkreis
   F"urth, Bankleitzahl 762\,501\,10
\end{quote}

Mittels elektronischer Post (email) bin ich im Subnetz unter
%A5 der Adresse
{\tt lutz@bisun.nbg.sub.org}\label{mailboxen} erreichbar. Da s"amtliche
Daten "uber private Telefonleitungen gehen und teilweise auch noch
zus"atzliche "Ubertragungsgeb"uhren kosten (f"ur Senden {\em und
Empfangen\/}!), bitte keine Riesenbriefe schicken oder zumindest vorher
bei mir anfragen.

%
%------------------------ Weitere Informationen ---------------------------
%
\section{Weitere Informationen}
In gro"sen Teilen des Z-Netzes und Fidonetzes sowie im Subnetz und Mausnetz
gibt es ein \TeX-Forum (Z-Netz: /T-NETZ/TEX, Fido: TEX.GER, Subnetz: sub.tex,
Maus: Gruppe TeX), das sowohl von Entwicklern und Experten als auch von
Benutzern (Anf"anger und Fortgeschrittene) von \TeX\ und \mf\ f"ur den
Informationsaustausch und Fragen genutzt wird. Wer einen Zugang zu einem
der genannten Netze hat und auf dem laufenden bleiben will oder Fragen
zu einem der Programme hat, sollte sich auf jeden Fall mal in diesem Forum
umsehen. Dieses Forum ist nat"urlich nicht auf Atari-Benutzer beschr"ankt.

Wer Zugang zum Internet oder Bitnet (EARN etc.) hat, kommt noch an
viel mehr Informationen ran, als Stichworte seien hier nur die \TeX hax
oder die deutsche Mailingliste tex-d-l@dearn genannt. Wer m"ochte, kann
hier den ganzen Tag damit zubringen, Nachrichten "uber \TeX\ zu lesen.

Neuerdings hat Stefan Lindner f"ur Modem-Besitzer auch einen eigenen
\TeX-Server eingerichtet, der etliche Megabytes an \TeX-Makros,
Zeichens"atzen f"ur \mf\ und Programmen (haupts"achlich f"ur den
Atari~ST) bietet. Die Telefonnummer ist 09\,11~/~75\,85\,47,
Parameter 1200--14400/8/N/1, Benutzername {\tt gast}.

Von Stefan Lindner kann man zu "ahnlichen Konditionen wie bei \mf\ das
be\-r"uhm\-te Schriftsatzprogramm \TeX\ (ebenfalls von Donald Knuth entwickelt)
zusammen mit DVI-Ger"atetreibern f"ur die gebr"auchlichsten Dru"cker
bekommen. Seine Adresse lautet:
\begin{verse}
   Stefan Lindner\\
   Iltisstra"se 3\\
   8510 F"urth\\[0.5\baselineskip]
   Telefon: 09\,11~/~7\,59\,18\,86
\end{verse}

Ebenso sind \TeX{} und \mf{} von der Firma Neumann-Seidel GbR erh"altlich,
n"aheres dazu im Abschnitt "uber die Shareware-Bedingungen auf Seite~%
\pageref{seidel}.

%
%****************************** Shareware **********************************
%
\chapter{Shareware}

%
%------------------------ Shareware-Bedingungen ----------------------------
%
\section{Shareware-Bedingungen}
Beide Disketten d"urfen (und sollen) unter den folgenden
Bedingungen beliebig kopiert und weitergegeben werden:
\begin{itemize}
\item Es werden {\it alle\/} Dateien auf der Diskette kopiert.
\item Diese Anleitung und die Programme \mf\ und \inimf\ werden nicht
 ver"andert.
\item Die Weitergabe erfolgt ausschlie"slich zu nichtkommerziellen Zwecken.
\end{itemize}
Kurz gesagt, ich m"ochte nicht, da"s unvollst"andige Versionen kursieren,
oder da"s jemand mit diesen Programmen Geld verdient.

Ich kann nat"urlich f"ur die gesamten Programme und die Daten keine
Garantie geben, und auch keine eventuell auftretenden Sch"aden ersetzen
(wenn also z.B. die Augen nicht mehr mitmachen, weil sie durch einen
falschen Zeichensatz zu Tode erschreckt sind, dann bitte die Arztrechnung
nicht an mich schicken). Ich habe jedenfalls versucht, alles so gut und
richtig wie m"oglich zu machen.

Jeder, dem diese Implementation von \mf\ gef"allt, und der die
Programme "ofter verwendet, wird gebeten, 50,-- DM (au"serhalb Deutschlands
wegen des h"oheren Portos 55,-- DM oder US-\$ 30 bar oder Euroscheck oder
Order-Scheck) an meine auf Seite~\pageref{adr} angegebene Adresse zu schicken.

Alternativ kann man eine registrierte Version von \mf\ auch von der Firma
Neumann-Seidel GbR\label{seidel}, Hafenstra"se 16 in W-2305 Heikendorf beziehen. Das
\mf\ zusammen mit den gedruckten Anleitungen zu \mf{} und zur \TeX-Shell
kostet dort DM~65,--. Wer Stefan Lindners \TeX{} gleich mitbestellt, bekommt
das Komplettpaket mit Anleitungen f"ur DM~129,--.

Jeder registrierte Benutzer erh"alt folgenden Service:
\begin{itemize}
\item Die neueste Version (mit Seriennummer, dazu unten mehr) wird
   zugeschickt.
\item Telefon-Hotline: kostenlose Beratung registrierter Benutzer\footnote{%
   Das soll nat"urlich nicht hei"sen, da"s nur registrierte Benutzer
   bei mir anrufen d"urfen. "Uber Lob, Kritik, Verbesserungsvorschl"age
   oder gar selbstgeschriebene Programme zu \mf\ oder Ideen dazu freue
   ich mich immer. Nur kann es passieren, da"s ich bei Fragen, zu deren
   Beantwortung ich selbst erstmal etwas Zeit investieren mu"s, zun"achst
   frage, ob der Anrufer registriert ist.}.
\item Registrierte Benutzer k"onnen bei mir f"ur 30,-- DM (oder US-\$ 20)
   den kompletten Quellcode (in C) zu \mf\ anfordern, auch hier ist ein
   Update im Preis enthalten.
\item Das erste Update wird kostenlos zugeschickt (wo kriegt man heute noch
   so einen Service?), alle weiteren Updates werden schriftlich
   bekanntgegeben, registrierte Benutzer erhalten diese dann gegen
   voraussichtlich ca.\ 10,-- DM pro Diskette.
\end{itemize}

%
%------------------------------ Seriennummer -------------------------------
%
\section{Seriennummer}
In jeder \mf-Version ist eine Seriennummer enthalten. Wenn jemand (im
folgenden A genannt) den oben genannten Betrag bezahlt, erh"alt er daf"ur
eine Version mit einer neuen Seriennummer. Diese Nummer wird bei mir 
registriert. Wenn er nun diese registrierte Version weitergibt (und das
soll er ja), und einer der Empf"anger dieser Kopie zahlt seinerseits die
Sharewaregeb"uhr, so erh"alt A davon 15,--~DM (5,--~DM ab 1.1.1993)
als "`Pr"amie"' f"ur die Verbreitung des Programmes.

Wenn jemand allerdings mehr als drei"sigmal die Belohnung kassiert, gehe ich
davon aus, da"s es sich um einen kommerziellen Software-Vertrieb handelt,
und gebe an diesen keine Belohnungen mehr weiter.

Mit diesem Konzept will ich einerseits die Verbreitung von \mf\ etwas
beschleunigen, und andererseits versuchen, m"ogliche Anfangsschwierigkeiten
durch pers"onlichen Kontakt unter den Benutzern zu verringern (damit ein
Benutzer, der weit entfernt von mir wohnt, bei Problemen mit \mf\ zun"achst
zum vermutlich n"aher gelegenen Bekannten gehen kann, von dem er die Kopie
hat, bevor er bei mir anruft, um das Problem zu l"osen. Vieles l"a"st sich
eben bei einem pers"onlichen Gespr"ach viel leichter und billiger l"osen
als "uber eine lange Telefonleitung).

Damit ich die "`Pr"amie"' weiterleiten kann, bitte bei der Registrierung
unbedingt die Seriennummer der bisher benutzten Version (erscheint bei
jedem Start von \mf\ in der zweiten Zeile auf dem Bildschirm) mit angeben.
Falls man bisher noch keine Version besa"s (ist mir im Moment allerdings
noch unklar, wie man dann an diese Anleitung kommen kann), sollte man
dies bitte deutlich vermerken. Am besten druckt man die Datei
\file{FORMULAR.TXT} auf einem Drucker aus und macht die entsprechenden
Eintragungen oder sendet das ausgef"ullte Formular an die auf
Seite~\pageref{mailboxen} angebene email-Adresse.

%
%******************************* Installation ******************************
%
\chapter{Installation}

Alle Hinweise in diesem Kapitel sind lediglich Vorschl"age f"ur Benutzer,
die bis jetzt noch wenig Erfahrung mit \mf\ haben. Durch die Verwendung
einer "`Setup-Datei"' kann man die Programme und Daten fast
beliebig auf seinen Speichermedien verteilen. 

Da die kompletten Sourcecodes der Zeichens"atze insgesamt "uber
700~KByte Umfang besitzen, war es n"otig, einige Zeichens"atze mit
dem Programm {\mc LHARC} zu komprimieren. Dieses Programm befindet sich
ebenfalls auf Diskette~2. Bez"uglich der Weitergabe dieses Programmes
verweise ich auf die dortige Anleitung.

%
%------------------------ Installation auf Festplatte ----------------------
%
\section{Installation auf Festplatte}
Besitzer einer Festplatte sind (nicht nur) bei der Installation fein raus:
Sie starten einfach das Programm \file{INSTALL.PRG} auf Diskette~1. Da
dies ein allgemein verwendbares Programm ist, fragt es erst einmal nach
einer Datei, in der die genauen Installationsanweisungen stehen. F"ur
\mf\ w"ahlt man hier die Datei \file{METAFONT.INS} aus. Nun kann man
ausw"ahlen, ob man nur die Grundinstallation durchf"uhren will oder auch
die \TeX-Shell installieren will, und ob man die Zeichens"atze komprimiert
auf der Platte stehen haben m"ochte oder lieber ausgepackt (schneller,
aber daf"ur mehr Platzbedarf).

Wenn man nun den OK-Button anklickt, wird man noch nach dem Ziel gefragt,
wo das \mf-System installiert werden soll (hier wird der Pfad angegeben,
wo dann das Programm selbst und alle Unterordner stehen sollen). Dann
kann man sich zur"ucklehnen und der Installation zuschauen, nur einmal
wird man noch aufgefordert, die zweite Diskette einzulegen.

Man kann "ubrigens auch die Disketten in eine RAM-Disk oder auf die
Festplatte kopieren, dann geht die Installation noch schneller. Man mu"s
dabei nur beachten, da"s die Installationsdatei \file{METAFONT.INS}
auch von Platte bzw.\
RAM-Disk geladen wird. Die Auf"|forderung nach einem Diskettenwechsel
beantwortet man einfach mit einem Tastendruck (es mu"s {\bf nicht} die
Festplatte oder RAM-Disk ausgewechselt werden!).

Wenn das Programm fertig ist, steht \mf\
gebrauchsfertig auf der Platte, die Setup-Datei ist auch bereits an die
"ortlichen Gegebenheiten angepa"st. Lediglich bei der \TeX-Shell m"ussen
noch die Pfade eingestellt werden (siehe dazu die Anleitung der \TeX-Shell).
Ein weiterer Vorteil des Installationsprogrammes ist die automatische
"Uberpr"ufung der Dateien mittels CRC-Pr"ufsummen, und zwar nicht nur
beim Extrahieren (Auspacken) von Dateien aus LHARC- oder Larc-Dateien,
sondern auch beim Kopieren.

%
%------------------- Installation auf Disketten-Laufwerk -------------------
%
\section{Installation auf Disketten-Laufwerk}
F"ur eigene Experimente mit \mf, bei denen die CMR-Sourcecodes nicht
ben"otigt werden, kann die Programmdiskette (am besten nat"urlich eine
Sicherheitskopie davon) ohne spezielle Installation verwendet werden.
Benutzer, die nur einseitige Laufwerke besitzen, k"onnen sich (bei einem
Freund mit zweiseitigem Laufwerk) eine Arbeitsdiskette zusammenstellen,
auf der nur die Dateien \file{METAFONT.PRG}, \file{METAFONT.RSC},
\file{MFSETUP} und
\file{PLAIN.BSE} stehen. Es bleiben dann noch etwas mehr als 100~KByte
"ubrig, in denen Eingabedateien (\verb|*.MF|) sowie LOG-, GF- und
TFM-Dateien untergebracht werden k"onnen. Routinierte Diskjockeys oder
Besitzer von zwei Laufwerken k"onnen in der Setup-Datei auch
Laufwerk~\verb|B:\|
angeben (z.B. bei den {\tt inputpaths}). Wer noch etwas Platz im RAM hat,
kann eine kleine Ramdisk (Minimum ca.\ 50~KByte) installieren, und in der
Setup-Datei {\tt logpath}, {\tt gfpath} oder {\tt tfmpath} (auf diese
Dateien wird in der Regel w"ahrend des gesamten Programmlaufes etwas
geschrieben) auf die Ramdisk setzen.

Um komplette Zeichens"atze f"ur \TeX\ zu erzeugen, mu"s man schon etwas
mehr mit dem Diskettenplatz jonglieren. Nachdem es aber inzwischen
m"oglich ist, auch komprimierte Dateien direkt mit \mf\ zu lesen,
ist es durchaus m"oglich (wenn auch nicht komfortabel), mit nur
einem einseitigen Laufwerk zu arbeiten. Wer tats"achlich so enge
Platzverh"altnisse hat und deswegen mit der Installation nicht klar
kommt, m"oge sich bei mir melden, dann versuche ich, eine arbeitsf"ahige
Verteilung der Dateien zu finden.

Insgesamt braucht man ca.\ 1~MByte Speicher %***** <1 MByte!!!
auf Disketten und
evtl.\ Ramdisk, um das Programm, die Base-Datei und alle Zeichensatz-Sourcen
zu speichern. Es w"urde hier wohl zu weit f"uhren, f"ur jede m"ogliche
Rechnerkonfiguration (davon gibt es schlie"slich sehr viele verschiedene)
die beste Auf"|teilung anzugeben, schon allein deswegen, weil es auch auf
den Anwendungsfall ankommt, was man als {\em beste\/} Auf"|teilung ansehen
kann. Ich denke jedoch, da"s es mit diesen Informationen jedem Benutzer
m"oglich sein sollte, eine f"ur seine Anwendung passende Verteilung der
Daten zu finden (wenn nicht, gibt es ja immer noch die "`Telefon-Hotline"'
oder andere \mf-Benutzer, die solche Arbeiten schon hinter sich haben).

%
%-------------------------- Wichtige Hinweise --------------------------
%
\section{Wichtige Hinweise}
Im folgenden ein paar Hinweise zum Betrieb des Programmes, die sich im
Laufe der Zeit angesammelt und keinen besseren Platz in dieser Anleitung
gefunden haben.

\begin{itemize}
\item Wenn man die Version~2.0 von Tempus verwendet und dort die Parameter
  abspeichern will, so sollte man das Programm dazu unbedingt vom Desktop
  aus starten. Wenn man Tempus aus der \TeX-Shell (oder einer anderen Shell)
  startet und dann "`\verb|Param. & sichern...|"' aufruft, werden die
  Parameter {\em nicht} in Tempus, sondern in der {\em Shell} abgespeichert!
  Die Shell kann man nach so einer Aktion unbesorgt in den Desktop-Papierkorb
  schmei"sen. Ab Tempus Version~2.05 ist dieser Fehler beseitigt worden.
\item Mit einigen `mode'-Definitionen (z.B. \verb|stlaser| f"ur den
  Atari-Laser"-dru"cker {\mc SLM804}) in der Datei \file{atari.mf}
  gibt es manchmal Probleme mit CMR-Zei\-chen\-s"atzen:
  \mf\ meldet den Fehler \verb|"! Bad pos..."| und an\-schlie"send
  \verb|"! Strange path..."|.
  Dieser Fehler liegt nicht an der \mf-Implementation, und auch die
  CMR-Sourcecodes sind korrekt. Eine genauere Untersuchung ergab, da"s die
  negativen `{\tt blacker}'-Werte in der Datei \file{ATARI.MF} (bzw.\
  \file{modes.mf}) schuld sind. Knuth
  warnt in seinem Buch "`Computer Modern Typefaces"' (Computers \&
  Typesetting, Volume~E) auf Seite~7 ausdr"ucklich vor einem
  $\hbox{\tt blacker} < 0$ :

  \begin{quote}
     ``Trouble might also arise if the device-specific parameter called
     {\it blacker\/} is made negative.''
  \end{quote}

  Leider sehen auf manchen Ger"aten die Zeichens"atze nun mal am besten aus,
  wenn `{\tt blacker}' negativ ist. Deswegen wurde mittels der Datei
  \file{cmlocal.mf} eine Behandlung des Problems eingef"uhrt. Es wird
  zwar noch ein Fehler gemeldet, aber zumindest ist der Zeichensatz noch
  verwendbar, wenn dieser Fehler aufgetaucht ist. Eine genauere Erkl"arung
  des Problems und der zur L"osung verwendeten Methode findet man in
  der Datei \file{doc}\bs\file{bad\_pos.doc}.
\end{itemize}


%
%******************** METAFONT auf dem Atari ST ****************************
%
\chapter{\protect\mf\ auf dem Atari ST}

\mf\ wurde auf dem ST als \gem-Programm realisiert. S"amtliche Textausgaben
gehen in ein Text-Fenster, dort werden auch die Eingaben des Benutzers
vorgenommen. Ein zweites Fenster dient der Ausgabe von Grafik. Dieses wird
aber erst auf Anforderung ge"offnet, z.B. mit den \mf-Befehlen {\tt openit}
oder {\tt showit}. Wenn man bei der Erzeugung eines Zeichensatzes jedes
Zeichen sehen will, bevor es in die GF-Datei geschrieben wird, kann man
dies mit dem \mf-Befehl {\tt screenchars} einschalten. Mit {\tt
screenstrokes} kann man jeden einzelnen "`Pinselstrich"' auf dem Bildschirm
sehen. F"ur die weiteren Grafikbefehle sei auf das \mf book~\cite{mfbook}
verwiesen. F"ur Spezialanwendungen kann man die \gem-Umgebung in \mf\
auch deaktivieren, siehe dazu die Beschreibung der Environment-Variablen
\verb|MF_NOGEM| in Abschnitt~\ref{environment}.

Man kann die Fenster jederzeit vergr"o"sern, verkleinern oder verschieben,
auch w"ahrend \mf\ besch"aftigt ist. Bei l"angeren Dateioperationen (z.B.
Laden der Base-Datei) oder komplizierten Berechnungen kann es jedoch
vorkommen, da"s \mf\ nicht sofort auf die Aktivit"aten des Benutzers
reagiert, soda"s man entsprechend l"anger auf die Maustaste dr"ucken mu"s.
In den meisten F"allen zeigt \mf\ diesen Umstand mit einer "`flei"sigen
Biene"' als Mauscursor an.

Die Fenstergr"o"sen und -Positionen zu Beginn des Programmes k"onnen durch
verschiedene Environment-Variablen eingestellt werden, siehe dazu
Abschnitt~\ref{environment}.

Die Arbeit von \mf\ kann man durch gleichzeitiges Dr"ucken der Tasten
{\mc CONTROL} und {\mc ALTERNATE} unterbrechen, man landet dann in der
normalen Feh\-ler\-be\-hand\-lungs-Rou\-ti\-ne, wo man z.B. Endlosschleifen untersuchen
kann, Variablen abfragen oder das Programm beenden kann. Aus den gleichen
Gr"unden wie im vorigen Absatz mu"s man die beiden Tasten eventuell etwas
l"anger gedr"uckt halten. \mf\ unterbricht n"amlich nur dann seine Arbeit,
wenn es auch in der Lage ist, zus"atzliche Eingaben des Benutzers zu
verdauen. Trotzdem ist es zum Beispiel bei der Untersuchung von Variablen
ratsam, die Aktivit"aten vor \mf\ zu "`verstecken"', damit man nichts
durcheinanderbringt. Dies kann man durch das {\tt hide}-Makro erreichen.
Um z.B. den Inhalt der Variablen $x$ anzuzeigen, gibt man folgendes ein:
\begin{verbatim}
   I hide(show x)
\end{verbatim}

W"ahrend \mf\ auf eine Eingabe wartet, kann man es durch Dr"u"cken der
{\mc ESC}-Taste abbrechen. Wenn man in der daraufhin erscheinenden
Alarm-Box auf {\tt abort} klickt, riskiert man allerdings unvollst"andige
GF- und TFM-Dateien!

%
%------------------------- Komprimierte Dateien --------------------------
%
\section{Komprimierte Dateien}\label{larc}

Wenn man wenig Speicherplatz zur Verf"ugung hat (und wer hat das nicht?)
und daf"ur eine etwas geringere Geschwindigkeit in Kauf nehmen
will, kann man die \mf-Eingabedateien in komprimierter Form speichern.
\mf\ ist in der Lage, mit dem Programm Larc komprimierte Dateien
(\verb|*|\file{.lzs}) einzulesen. Dieses Dateiformat ist "ahnlich dem
bekannten \verb|*|\file{.lzh}-Format von LHarc (genauer gesagt ist es ein
Vorg"anger davon, und neuere LHarc-Versionen sind auch in der Lage,
dieses Format zu verwenden), mit dem wesentlichen Unterschied, da"s
es erheblich schneller expandiert werden kann als \file{lzh}-Dateien.

Um \mf\ mitzuteilen, welche Larc-Archive es durchsuchen soll,
mu"s ihm lediglich im Suchpfad f"ur die Eingabepfade ({\tt inputpaths},
siehe dazu den Abschnitt~\ref{setup}) der Name der \file{lzs}-Dateien
genannt werden.


%
%--------------------------- Setup-Datei -------------------------------
%
\section{Setup-Datei}\label{setup}
In der Setup-Datei stehen s"amtliche Pfade, auf die \mf\ zugreifen kann.
Wenn in der Kommandozeile nichts anderes angegeben wurde, sucht \mf\
nach der Datei \file{MFSETUP} im aktuellen Ordner.
Die Syntax f"ur die Pfad-Definitionen ist bis auf die Bezeichnung der
Schl"usselw"orter genau die gleiche wie beim \TeX\ von Stefan Lindner. Es sind
also zwischen den einzelnen W"ortern (Token) beliebig viele Leerzeichen,
Returns, Tabulatoren und Kommentare erlaubt. Kommentare werden mit einem
{\tt`\%'} eingeleitet
und gehen bis zum Zeilenende (wie bei \TeX\ und \mf\ "ublich). Auf der
linken Seite vom {\tt `='} d"urfen folgende Schl"usselw"orter stehen
(in Klammern ist jeweils angegeben, welchen Pfad \mf\ verwendet, wenn in
der Setup-Datei nichts definiert ist). Wenn nichts anderes angegeben ist,
gelten die Pfade sowohl f"ur \mf\ als auch f"ur \inimf.
\begin{description}
\item [\tt poolfile] gibt an, von wo \inimf\ den String-Pool l"adt. 
  Dies mu"s ein g"ultiger Dateiname sein, er darf also insbesondere nicht
  mit einem Backslash (\verb|\|) enden, und die Extension mu"s bei Bedarf
  explizit angegeben werden. Dieser Pfad gilt nur f"ur \inimf; \mf\ ignoriert
  ihn. (\bs\file{mf}\bs\file{bases}\bs\file{mf\_pool})
\item [\tt defaultbase] ist die Base-Datei, die \mf\ l"adt, wenn der
  Benutzer nichts anderes angegeben hat. Auch dies mu"s genauso wie
  {\tt poolfile} ein g"ultiger Dateiname sein.
  (\bs\file{mf}\bs\file{bases}\bs\file{plain.bse})
\item [\tt basepaths] dort wird die Base-Datei gesucht, wenn eine
  angegeben wurde. Wenn keine angegeben wurde, l"adt \inimf\ gar keine
  Base-Datei, w"ahrend \mf\ die unter {\tt defaultbase} genannte verwendet.
  (\bs\file{mf}\bs\file{bases}\bs)
\item [\tt inputpaths] besteht in der Regel aus einer Liste von
  Pfaden, in denen nach Input-Dateien (\verb|*|\file{.MF}) gesucht werden soll.
  (\bs\file{mf}\bs\file{inputs}\bs)
\item [\tt gfpath]       in diesen Ordner werden die GF-Dateien geschrieben.
  (\bs\file{mf}\bs)
\item [\tt tfmpath]      ist der Ort, wo die TFM-Datei abgelegt wird.
  (\bs\file{mf}\bs)
\item [\tt logpath]      dorthin kommt die LOG-Datei. (\bs\file{mf}\bs)
\item [\tt dumppath]     ist der Ordner, in den \inimf\ die Base-Datei
  schreibt, wenn `dump' befohlen wurde. (\bs\file{mf}\bs\file{bases}\bs)
\end{description}

Auf der rechten Seite des {\tt `='} steht jeweils der Pfad, in dem nach der
entsprechenden Datei gesucht wird. Dieser Pfad sollte in der Regel
absolut angegeben werden, damit \mf\ die Dateien auch dann findet, wenn
es von einem anderen Directory oder Laufwerk aus gestartet wurde. Ein
Punkt (`\file.') ist auch ein g"ultiger Pfad, er bezeichnet das aktuelle
Directory. Wenn dies nicht explizit in der Setup-Datei angegeben ist,
sucht \mf\ {\em nicht\/} automatisch im aktuellen Directory nach
einer Datei. Mit Ausnahme von {\tt poolfile} und {\tt defaultbase} 
(dies sind ja Dateinamen und keine Pfade) d"urfen alle Pfade wahlweise
mit oder ohne `\verb|\|' am Ende angegeben werden. Bei {\tt
basepaths} und {\tt inputpaths} d"urfen mehrere Pfade, jeweils getrennt durch
ein Komma, definiert werden. \mf\ durchsucht dann in der vorgegebenen
Reihenfolge alle Pfade, bis es die Datei gefunden hat. Jede
Pfad-Definition mu"s mit einem Strichpunkt abgeschlossen werden.
Zwischen Gro"s- und Kleinschreibung wird nicht unterschieden.

Wie in Abschnitt~\ref{larc} bereits angedeutet, kann man bei den
{\tt inputpaths} auch komprimierte Dateien (Larc-Archive) angeben, diese
m"ussen die Extension \file{.lzs} besitzen. Im Prinzip werden die
Larc-Archive von \mf\ wie ein Dateiverzeichnis angesehen, allerdings
mit der Einschr"ankung, da"s keine Unterverzeichnisse verwendet werden
d"urfen (im Larc-Archiv d"urfen also nur Dateinamen, keine Pfade
abgespeichert werden).

Um zu vermeiden, da"s der Benutzer mit steigender Anzahl an
\mf-Zeichens"atzen eine undurchschaubar lange Liste an {\tt inputpaths}
angeben mu"s, wurde au"serdem die M"og"-lichkeit vorgesehen, sogenannte
Wildcards zu verwenden. Dazu k"onnen in den {\tt inputpaths} die
\gemdos-"ublichen Zeichen Stern und Fragezeichen (\verb|*|, \verb|?|)
mit der ebenso "ublichen Bedeutung (beliebig viele Zeichen bzw. genau
ein Zeichen, nur in letztem Pfad-Teil erlaubt, etc.) verwendet werden.
Bei Pfaden mit Wildcards (und nur da) kommt es auch darauf an, ob der
Pfad mit einem Backslash (\verb|\|) abgeschlossen ist oder nicht: Pfade
mit Backslash am Ende betreffen n"amlich ausschlie"slich Directories,
{\bf keine} Archive. Damit ist es m"oglich, in einem Verzeichnis, das
sowohl Unterverzeichnisse als auch \file{lzs}-Archive enth"alt, mit
\verb|...\*|\file.\verb|*\| zuerst alle Unterverzeichnisse und dann mit
\verb|...\*|\file{.lzs} alle Archive auszuw"ahlen, so da"s zuerst die
ausgepackten Dateien in den Verzeichnissen untersucht werden, und erst,
wenn dort nichts gefunden wurde, auf die komprimierten Archive
ausgewichen wird.


%
%--------------------------- Kommandozeile ---------------------------------
%
\section{Kommandozeile}
\mf\ wurde so implementiert, da"s es als \gem-Programm vom Desktop aus
m"oglichst einfach gestartet werden kann. Viele Benutzer verwenden jedoch
lieber eine Shell, die ihnen manche Tipparbeit ersparen kann. Als erstes
sei hier die hervorragende \TeX-Shell von Klaus Heidrich, Robert Kie"sling
und Reinhard Maluschka genannt, die dem Paket ebenfalls beiliegt.
Mancher bevorzugt aber auch textorientierte Shells, die meist an UNIX oder
MS-DOS angelehnt sind. Um die Verwendung solcher Shells (sowohl \gem- als
auch textorientierte) zu erm"oglichen,
wurden einige Optionen definiert, die in der Kommandozeile angegeben werden
k"onnen. Parameter ({\it Dateiname\/} bzw.\ {\it Zahl\/}) d"urfen durch ein
Leerzeichen von der Option getrennt werden. Verschiedene Optionen
{\em m"ussen\/} durch ein Leerzeichen voneinander getrennt werden.
\begin{description}
\item[-j] \quad Wenn \mf\ seine Arbeit beendet hat, wird normalerweise ein
   akustisches Weck-Signal ausgegeben und gewartet,
   bis der Benutzer durch einen Tastendruck signalisiert, da"s er wieder
   aufgewacht ist und alle wichtigen und unwichtigen Mitteilungen auf dem
   Bildschirm gelesen hat. Wenn man jedoch mit der \TeX-Shell oder einer
   Batchdatei z.B. w"ahrend der Nacht gleich mehrere Zeichens"atze
   hintereinander erzeugen will, w"are es unpraktisch, wenn man alle zehn
   Minuten zum Computer rennen m"usste, nur um auf eine Taste zu dr"ucken.
   Das kann der Computer schlie"slich auch selber machen. Mit der Option
   {\tt -j} kann man \mf\ mitteilen, da"s es die Nacht- (oder Tag-) Ruhe
   nicht durch Gebimmel unterbrechen soll, und da"s es am Ende nicht auf
   eine Taste warten soll, da sowieso niemand die Kommentare auf dem
   Bildschirm lesen will.

   Wenn w"ahrend des \mf-Laufes ein fataler Fehler oder Speichermangel
   auftritt, wird die Sache etwas komplizierter. Die folgende
   Beschreibung kann ohne Probleme "ubersprungen werden, wenn man beachtet,
   da"s der \verb|nonstopmode| (oder gar \verb|batchmode|) nur dann
   eingeschaltet sein sollte, wenn \mf\ l"angere Zeit unbeaufsichtigt
   (z.B. "uber Nacht) laufen soll. Falls bei einem solchen "`Batchlauf"'
   Probleme auftauchen, sollte der erste Schritt darin bestehen, den
   \verb|nonstopmode| wieder auszuschalten (\TeX-Shell: siehe Dialogbox
   im \mf-Teil unter "`\verb|P zus. Parm.|"')!

   Bei fatalen Fehlern und Speicherproblemen (R"uckgabewerte 3 und 6) wartet
   \mf\ auf einen Tastendruck, auch wenn die "`Silent-Option"' \verb|-j|
   aktiviert wurde. Dies l"a"st sich nur dadurch vermeiden, da"s man \mf\
   im \verb"nonstopmode" oder \verb"batchmode" laufen l"a"st (das sind
   eingebaute \mf-Befehle). Das kann zum Beispiel dann sinnvoll sein, wenn
   man den Rechner "uber Nacht laufen l"a"st, und die Shell auch bei fatalen
   Fehlern (z.B. mehr als 100 normale Fehler, capacity exceeded, aber auch
   Platte voll, nicht gen"ugend Speicher!) weitermachen soll. Leider ist es
   bei manchen "`fatalen Fehlern"' nicht m"oglich, die Fehlerursache in die
   Logdatei zu schreiben (z.B. wenn die Platte voll ist), so da"s im
   \verb|nonstopmode| oder \verb|batchmode| der nur auf dem Bildschirm
   erscheinende Fehlerhinweis sofort wieder verschwindet. In diesem Fall
   sollte man (z.B. am n"achsten Morgen) den entsprechenden Zeichensatz
   nochmal unter Aufsicht und ohne \verb|nonstopmode| erzeugen, so da"s man
   die Fehlermeldung auf dem Bildschirm betrachten kann.

   Fatale Fehler, die bereits unmittelbar beim Programmstart auftreten (z.B.
   Fehler in Setup-Datei, Speichermangel) lassen sich jedoch auch mit einem
   \verb|nonstopmode| oder \verb|batchmode| nicht "uberspringen, weil die
   entsprechenden \mf-Befehle zu diesem Zeitpunkt noch gar nicht ausgewertet
   sind. In diesen F"allen ist es aber meistens sowieso nicht sehr sinnvoll,
   noch weiterarbeiten zu wollen, da sie auch bei jedem weiteren
   Programmstart wieder auftreten w"urden.
\item[-s {\it Dateiname\/}] \quad \mf\ soll die Pfaddefinitionen aus der
   Datei {\it Da\-tei\-na\-me\/} lesen. Ohne Angabe dieser Option sucht \mf\ nach
   der Datei \file{MFSETUP} im aktuellen Directory. Wenn eine Setup-Datei
   nicht gefunden wird, dann werden die im vorigen Abschnitt angegebenen
   Standardpfade verwendet. Bei Verwendung der \TeX-Shell in der momentanen
   Version empfehle ich jedoch, immer die Datei \file{MFSETUP} zu verwenden,
   und dort auch alle Pfade zu definieren, sonst kann es zu Problemen im
   Zusammenspiel der verschiedenen Programme kommen (in zuk"unftigen
   Versionen der \TeX-Shell wird es vielleicht ein Telepathie-Modul geben,
   das die Gedanken des Benutzers liest und daraus die gew"unschten
   Pfade ableitet\dots).
\item[-e {\it Zahl\/}] \quad Bei Verwendung der \TeX-Shell ist es durch diese
   Option m"oglich, direkt aus der Fehlerbehandlung in \mf\ durch Eingabe
   von `{\tt e}' einen Editor zu starten, der sofort die fehlerhafte Datei
   l"adt und in die entsprechende Zeile springt (sofern der Editor "ahnlich
   wie Tempus Dateiname und Zeilennummer in der Kommandozeile akzeptiert).
   Wie funktioniert nun das Ganze? \mf\ interpretiert die {\it Zahl\/} als
   Adres\-se im Hauptspeicher und erwartet dort einen Speicherbereich von
   mindestens 270 Zeichen, der mit dem nullterminierten String
   `\verb|TEXSHELL|' vorbesetzt ist. Wenn der Benutzer nun eine Fehlermeldung
   mit `{\tt e}' beantwortet, schreibt \mf\ den Namen der gerade bearbeiteten
   Datei und durch ein Leerzeichen davon getrennt die aktuelle Zeilennummer
   in diesen Speicherbereich (dabei wird die Zeichenfolge \verb|"TEXSHELL"|
   "uberschrieben). Diese Informationen kann das aufrufende Programm
   auswerten und anschlie"send den Editor starten.
\item[-w {\it Zahl\/}]
\item[-h {\it Zahl\/}] \quad Diese beiden Werte geben die Breite
   und H"ohe des Grafik-Puffers in Pixeln an. Standard ist 640 mal
   400 Pixel. Siehe dazu auch die Beschreibung der beiden Environment-Va\-ria\-blen
   \env{MF\_SCREENWIDTH} und \env{MF\_SCREENHEIGHT} in Abschnitt~\ref{environment}.
   Wenn sowohl Environment-Va\-ria\-ble als auch die Kommando"-zeilen-Option
   angegeben sind, werden die Werte aus der Kommandozeile verwendet.
\end{description}
Wenn man eine Option eingibt, die \mf\ nicht kennt, wird eine Hilfsseite
("`Usage"') ausgegeben, in der nochmal die genaue Verwendung der Optionen
erkl"art ist.

%A5 Man kann \mf\ entweder als \gem-Programm oder durch "Andern
%A5 der File-Extension auf \file{.ttp} oder \file{.tos} als \tos-Programm starten,
Man kann \mf\ entweder als \gem-Programm starten oder durch "Andern
der File-Extension auf \file{.ttp} oder \file{.tos} als \tos-Programm,
wobei dann die gesamte Text-Ein/Ausgabe "uber \gemdos\ l"auft
und somit auch etwas schneller als "uber \gem. Da die Erkennung des
eigenen Programmnamens nicht hundertprozentig sicher ist, kann man
das auch "uber die Environment-Variable \env{MF\_NOGEM} umschalten,
mehr dazu in Abschnitt~\ref{environment}.

Zus"atzlich zu den eben beschriebenen Optionen kann man bereits in der
Kommandozeile eine Startzeile eingeben. Doch dazu erstmal eine Erkl"arung,
was mit Startzeile gemeint ist. Wenn \mf\ vom Desktop aus gestartet
wird, meldet es sich mit zwei Sternen (`$**$'). Damit l"a"st es erkennen,
da"s es auf die Eingabe der Startzeile wartet (die normale Eingabezeile
beginnt mit einem einfachen Stern). Die Besonderheiten, die f"ur die
Startzeile gelten, werden im Kapitel~\ref{kap-erste} n"aher
erl"autert. Diese Startzeile kann man nun bereits in der Kommandozeile
angeben, und zwar {\em nach\/} den Optionen. Es w"are zwar sehr ungew"ohnlich,
aber falls die Startzeile zuf"allig mit einem Minuszeichen (`-') beginnen
sollte, mu"s man diese erstmal durch zwei Minuszeichen von den Optionen
abtrennen. Eine Kommandozeile sieht also ganz allgemein so aus:
$$\hbox{\file{METAFONT.PRG} [{\it Optionen\/}] [-{}-] [{\it Startzeile\/}]}$$

Falls man die Startzeile bereits in der Kommandozeile angibt, sollte man
beachten, da"s manche Shells zun"achst alle Buchstaben in Gro"sbuchstaben
umwandeln, w"ahrend die Kommandos in \mf\ in der Regel klein geschrieben
sind (die bekannteste Shell mit diesem Verhalten ist wohl der \gem-Desktop,
der allerdings f"ur \gem-Programme normalerweise keine Kommandozeile
vorsieht). Also entweder eine "`vern"unftige"' Shell verwenden oder die
Startzeile erst in \mf\ (nach den zwei Sternen) eingeben.

Da in \mf\ der Backslash (`\bs') als Sonderzeichen definiert ist, darf er
in Datei\-na\-men in der Regel nicht verwendet werden (Ausnahmen: wenn \mf\ den
Benutzer explizit zur Eingabe eines Dateinamens auffordert sowie bei der
`{\tt -s}'-Option). Um Dateien
trotzdem mit einem Pfad versehen zu k"onnen, wurde der einfache
Schr"agstrich (`/') als Ersatzzeichen gew"ahlt (man ist damit auch dem
Filesystem von UNIX ein kleines -- wenn auch unbedeutendes -- St"uck n"aher).
Vor dem "Offnen einer
Datei wird dieses Zeichen wieder in einen Backslash zur"uckverwandelt,
damit \gemdos\ korrekt arbeiten kann. Generell l"a"st sich dazu aber sagen,
da"s man zumindest in den Eingabedateien auf Pfadangaben m"oglichst
verzichten sollte, denn portabel ist sowas nat"urlich nicht. Schon der
Nachbar hat auf seinem Atari~ST mit sehr gro"ser Wahrscheinlichkeit
eine andere Directory-Struktur, ganz zu schweigen von anderen
Computersystemen, wo Pfade m"oglicherweise ganz anders aufgebaut sind.


%
%----------------------- Environment-Variablen --------------------------
%
\section{Environment-Variablen}\label{environment}

Einige grundlegende Einstellungen von \mf\ kann man mit einer Reihe von
En\-vi\-ron\-ment-Variablen t"atigen. In den meisten Shells (z.B. in Gemini)
kann man dies mit dem \verb|setenv|-Befehl angeben, es gibt aber auch
Programme, die bei jedem Einschalten des Rechners das Environment einstellen.

\begin{description}
\item[\benv{MF\_RESOURCE} {\it Dateiname\/}] \quad \mf\ sucht die
   Resource-Datei im AES-Stan"-dard"-pfad (meist das aktuelle Verzeichnis).
   Wenn sie dort nicht gefunden wurde, versucht \mf, seinen eigenen
   Standort (also das Verzeichnis, von dem aus das Programm geladen wurde)
   ausfindig zu machen und sucht dort nach einem \file{METAFONT.RSC}.
   Da es Situationen geben kann, in denen \mf\ seinen Programmnamen
   und Standort nicht findet, wurde die M"oglichkeit geschaffen, den
   Ort der Resource-Datei "uber diese Environment-Variable anzugeben.
\item[\benv{MF\_NOGEM} {\it Zahl\/}] \quad In manchen F"allen kann es
   sinnvoll oder zumindest w"un"-schenswert sein, wenn \mf\ keine Ausgabe
   in \gem-Fenster macht, sondern nur die \gemdos-Ein/Ausgabe verwendet.
   Wenn diese Environ"-ment-Variable auf \verb|"1"| gesetzt ist, oder
   wenn die Extension des Programmnamens \file{.ttp} oder \file{.tos}
   ist (und die Suche nach dem eigenen Namen geklappt hat), wird
   keine einzige AES- oder VDI-Funktion aufgerufen, s"amtliche
   Textein- und ausgaben laufen "uber \gemdos, daf"ur ist allerdings
   auch keine Grafikausgabe mehr m"oglich.
\item[\benv{MF\_TEXTWIND} {\it x y Breite H"ohe\/}] \quad
   Mit dieser Variable kann man die Fensterposition und -gr"o"se des
   Textfensters beim Programmstart angeben. Dabei wird
   eine Folge von maximal vier durch Leerzeichen voneinander getrennten
   Zahlen genannt, die nacheinander die gew"unschte x- und y-Position
   sowie Breite und H"ohe des Fenster-{\em Inneren} in Pixeln bedeuten.
   Werte, die zu klein, zu gro"s oder gar nicht angegeben sind, werden
   mit den Maximalwerten belegt: {\it x} und {\it y} so, da"s die linke
   obere Ecke des Textfensters in der linken oberen Ecke des Desktops
   liegt, {\it Breite\/} und {\it H"ohe\/} mit den Abmessungen des
   Desktops (abz"uglich des Fensterrahmens), h"ochstens aber 25~Zeilen
   bzw.\ 80~Zeichen (es werden Zeichenbreite und -h"ohe des aktuellen
   Systemzeichensatzes zur Berechnung herangezogen).

   Zum Beispiel kann man mit \verb|setenv MF_TEXTWIND "0 0 640 200"|
   angeben, da"s das Textfenster anf"anglich zwar links oben steht,
   aber auf dem normalen SM124-Schwarz"-wei"s-Monitor von Atari nur
   die obere H"alfte des Bildschirms ausf"ullt.

\item[\benv{MF\_GRAPHWIND} {\it x y Breite H"ohe x-Offset y-Offset\/}] \quad
   F"ur die ersten vier Parameter gilt das f"ur \env{MF\_TEXTWIND} gesagte,
   bezogen auf das Grafikfenster. Die Maximalgr"o"se ist die Gr"o"se des
   Grafikpuffers (640 mal 400 bzw.\ die Werte der n"achsten beiden
   Environment-Variablen).

   Die beiden zus"atzlichen Zahlen geben den anf"anglichen Offset der linken
   oberen Ecke des Fensters von der linken oberen Ecke des Fensterinhaltes an.
   Will man beim Programmstart also den Grafik-Puffer ganz links oben sehen,
   h"angt man noch \verb|" 0 0"| oder gar nichts (weil das die
   Standard-Einstellung ist) an den Environment-String an.
   \verb|" 100 200"| sagt, da"s man die 100~Pixel am linken Rand und die
   200~Pixelzeilen am oberen Pufferrand "`"uberspringen"' (d.h. nicht im
   Fenster sehen) will. Wenn die Werte zu gro"s sind, wird der maximal
   m"ogliche Wert genommen.
   Man kann also z.B. bei einem $640\times400$-Puffer die Werte \verb|" 700 500"|
   angeben, und hat dann auf jeden Fall die rechte untere Grafikpuffer-Ecke
   im Fenster.
\item[\benv{MF\_SCREENWIDTH} {\it Zahl\/}]
\item[\benv{MF\_SCREENHEIGHT} {\it Zahl\/}] \quad
   S"amtliche Grafikausgaben gehen zun"achst in ei\-nen internen Puffer,
   der im Normalfall $640\times400$~Pixel gro"s ist. Das
   Grafikfenster auf dem Bildschirm stellt einen Ausschnitt aus diesem
   Puffer dar. Wenn man einen Gro"s"-monitor verwendet oder oft sehr gro"se
   \mf-Zeichen erzeugt, kann man den Grafikpuffer vergr"o"sern, indem
   man die Environment-Variablen \env{MF\_SCREENWIDTH} und
   \env{MF\_SCREENHEIGHT} mit der gew"unschten Zahl der Pixel (horizontal
   bzw.\ vertikal) belegt. Der Nachteil dieser Angelegenheit ist der
   gr"o"sere Speicherbedarf ($\hbox{Breite}\times\hbox{H"ohe}/8$~Bytes).

   Wenn zus"atzlich in der Kommandozeile die Optionen \verb|-w| oder
   \verb|-h| verwendet wurden, so gelten die dort angegebenen Werte.

   {\bf ACHTUNG}: Mit diesen Variablen "andert man ausschlie"slich
   die Ausma"se des Grafikpuffers. Wieviel davon \mf\ f"ur seine
   Grafikausgabe verwendet, ist eine andere Sache. Bei Benutzung der
   Plain-Makros m"ussen deshalb noch die Variablen {\tt screen\_cols} und
   {\tt screen\_rows} ge\-"an\-dert werden (die Werte werden z.B. in
   \file{ATARI.MF} gesetzt), eventuell mu"s auch noch das {\tt openit}-Makro
   ge"andert werden. Am besten liest man nach \file{ATARI.MF} noch
   eine weitere Datei, z.B. \file{LOCAL.MF} ein, in der solche
   "Anderungen untergebracht werden. Letzten Endes sind die im
   "`primitiven \mf-Befehl"' {\tt openwindow} angegebenen Werte
   f"ur \mf s Vorstellung von der Gr"o"se des Grafikpuffers
   verantwortlich.

   Technischer Hinweis f"ur "`Insider"': Da {\tt screen\_cols} und
   {\tt screen\_rows} keine in \mf\ eingebauten Variablen sind, kann
   und vor allem darf \mf\ diese nicht von sich aus ver"andern.
   Darum ist es nicht m"oglich, hier automatisch die verwendete
   Grafikpuffer-Gr"o"se einzutragen. Eine Alternative w"are es, die
   \mf-Syntax um zwei weitere eingebaute Variablen zu erweitern, die
   bei Programmstart mit der Puffergr"o"se initialisiert werden. Man
   k"onnte dann "uber {\tt everyjob} die Plain-Variablen
   {\tt screen\_cols} und {\tt screen\_rows} ver"andern. Dummerweise
   gibt es aber keinen Variablennamen, der ausschlie"slich f"ur \mf\
   reserviert w"are. Es kann also bei jedem beliebigen Variablennamen
   passieren, da"s ein Anwender genau diesen Namen schon in seinem
   Programm verwendet hat, womit die Kompatibilit"at nicht mehr
   gew"ahrleistet w"are. Vorschl"age hierzu sind sehr willkommen.
\item[\benv{MF\_EXTCHARSET} {\it Zahl\/}] \quad
   Wenn die Variable \env{MF\_EXTCHARSET} auf \verb|"1"| gesetzt
   wird, dann stellt \mf\ die Umlaute und andere Zeichen oberhalb von 127
   nicht mehr in der Ersatzdarstellung \verb|^^|$xx$ (z.B. \verb|^^84| f"ur
   "`"a"') dar, sondern direkt als Umlaut bzw.\ das entsprechende Sonderzeichen.
   Diese speziellen Zeichen k"onnen allerdings nur in Strings, Kommentaren
   und in Dateinamen verwendet werden, in allen anderen F"allen beschwert
   sich \mf\ "uber ein "`\verb|invalid character|"'. Achtung:
   \env{MF\_EXTCHARSET} wird nur von \inimf\ ausgewertet und in die
   Base-Datei geschrieben. Um das Verhalten von \mf\ zu beeinflussen, mu"s
   mit \inimf\ eine entsprechende Base-Datei erzeugt werden.

   Wer also die Umlaute auch in der Ausgabe als solche sehen m"ochte, sollte
   die Environ\-ment-Va\-riable \env{MF\_EXTCHARSET} auf \verb|"1"| setzen, um
   dann mit der \TeX-Shell durch An\-w"ah\-len des Buttons "`\verb|IniMF|"' eine
   neue Base-Datei zu erzeugen. F"ur \mf\ selbst ist es dann v"ollig
   unerheblich, wie \env{MF\_EXTCHARSET} gesetzt ist, solange die richtige
   Base-Datei verwendet wird.

   F"ur die Experten hier noch eine etwas genauere Erkl"arung: Normalerweise
   untersucht \mf\ jedes einzelne eingelesene Zeichen, ob es g"ultig
   ist. Nur beim Einlesen von Strings, Dateinamen (nach
   \verb|input|) und Kommentaren wird dieser Test au"ser Kraft gesetzt. In
   diesen drei F"allen kann also praktisch jedes beliebige Zeichen verwendet
   werden, unabh"angig davon, ob mit der Environment-Variablen
   \env{MF\_EXTCHARSET} ein erweiterter Zeichensatz aktiviert wurde oder
   nicht. Erst bei der Ausgabe dieser Zeichen tritt ein Unterschied zu Tage:
   Ein Standard-\mf\ gibt diese Zeichen in einer Ersatzdarstellung aus,
   z.B. ein "`"a"' als "`\verb|^^84|"' (das ist der Hexadezimalcode mit
   zwei \verb|^| davor). Durch Setzen von \env{MF\_EXTCHARSET} kann diese
   Umwandlung unterdr"uckt werden, so da"s auch ein ganz normales "`"a"' wieder
   ausgegeben wird. Allerdings wird diese Ausgabe-Umwandlungstabelle (als
   Teil des Stringpools) in der Base-Datei abgespeichert, die von \inimf\
   erzeugt wird. Ob also ein "`"a"' in der Eingabe als "`"a"' oder als
   "`\verb|^^84|"' in der Ausgabe erscheint, h"angt einzig und allein davon
   ab, wie \env{MF\_EXTCHARSET} gesetzt war, als die Base \file{plain.bse}
   mit \inimf\ (mit dem Kommando \verb|dump|) erzeugt wurde.

   Mutige k"onnen sich eine Base-Datei auch direkt mit einem Editor ansehen,
   um herauszufinden, ob sie Umlaute direkt oder in der Ersatzdarstellung
   definiert. Dazu mu"s man nur die 128 Zeichen vor dem String \verb|pencircle|
   anschauen: enthalten sie die Zeichen "`{\tt \c C"u\'e\^a"a} \dots\
   $\sqrt{ }{}^n{}^2{}^3${\tt \={ }}"', sind die Umlaute aktiviert,
   ansonsten stehen dort die Ersatzdarstellungen "`\verb|^^c0^^c1| \dots\
   \verb|^^fe^^ff|"'.
\item[\benv{ARGV}] \quad Wird f"ur die erweiterte Kommandozeile
   (\env{ARGV}-Verfahren) benutzt und sollte vom Benutzer nicht ver"andert
   werden. Eine genaue Beschreibung findet man in
   der Datei \file{EXARG.DOC}, "`GEMDOS Extended Argument
   (ARGV) Specification"' im \file{DOC}-Ordner.
\end{description}

%
%--------------------- Rueckgabewerte von METAFONT --------------------------
%
\section{R"uckgabewerte von \protect\mf}

Jedes Programm gibt an das aufrufende Programm eine Zahl zur"uck, den
R"uckgabewert. Mit Hilfe dieses Wertes kann man mit den meisten Shells
eventuell aufgetretene Fehler oder besondere Ereignisse w"ahrend des
Programmlaufes erkennen und entsprechend darauf reagieren. Es ist "ublich,
da"s bei einem fehlerfreien Lauf die Zahl Null zur"uckgegeben wird. Da
bei der Erzeugung eines Zeichensatzes eine ganze Menge ungew"ohnliches
passieren kann, wurden f"ur \mf\ sechs weitere Werte definiert ("ubrigens
gelten genau die gleichen Konventionen auch f"ur das \TeX\ von Stefan
Lindner). Im folgenden also eine vollst"andige Liste der Werte, die \mf\
an das aufrufende Programm zur"uckgeben kann:
\begin{description}
\item[0 -- no error] Es lief alles zur vollsten Zufriedenheit von \mf.
\item[1 -- warning] W"ahrend des Programmlaufes wurde mindestens eine
   Warnung ausgegeben, es wurden jedoch keine ernsthaften Fehler gefunden.
\item[2 -- error] Mindestens ein Fehler ist aufgetreten, die Arbeit wurde
   aber korrekt beendet, die erzeugten Daten sind (eventuell beschr"ankt)
   verwendbar.
\item[3 -- fatal error] \mf\ mu"ste wegen eines fatalen Fehlers abgebrochen
   werden, die erzeugten Dateien sind h"ochstwahrscheinlich unvollst"andig.
   Dies kann z.B. passieren, wenn \mf\ keine oder nur eine fehlerhafte
   Base-Datei finden konnte, wenn mehr als 100 normale Fehler aufgetreten
   sind, ein interner Fehler\footnote{ist zwar unwahrscheinlich, aber nie
   v"ollig auszuschlie"sen! In diesem Fall bitte ich um sofortige
   Benachrichtigung zusammen mit einer m"oglichst genauen Fehlerbeschreibung}
   entdeckt wurde oder der interne Speicher (siehe Speicherverwaltung)
   "ubergelaufen ist.
\item[4 -- edit] Der Benutzer hat bei einem aufgetretenen Fehler oder einer
   Unterbrechung (Interrupt) ein `{\tt e}' eingetippt. Wenn mittels der
   `{\tt -e}'-Option ein Speicherbereich spezifiziert wurde, schreibt \mf\
   in diesen den Namen der aktuellen Eingabedatei und die Zeilennummer.
\item[5 -- exit] Wenn der Benutzer in der Fehlerbehandlung ein `{\tt x}'
   eintippt oder w"ah"-rend einer Eingabe die Escape-Taste bet"atigt, dann wird
   dieser Wert zur"uckgeliefert.
\item[6 -- low memory] Zeigt an, da"s der freie Hauptspeicher (RAM) nicht
   ausreicht, um \mf\ starten zu k"onnen (siehe Speicherverwaltung).
   Abhilfe schafft nur entweder das Entfernen nicht ben"otigter residenter
   Programme oder der Kauf von mehr Speicher.
\end{description}


%
%------------------------ Speicherverwaltung --------------------------
%
\section{Speicherverwaltung}
Beim Programmstart fordert \mf\ einen konstanten Speicherbereich ("`interner
Speicher"') vom Betriebssystem an, in den es alle Variablen speichern kann.
Dieser Speicher ist in verschiedene Bereiche aufgeteilt (z.B. f"ur Strings,
Eingabepuffer, verschiedene Kernings, "`main memory"' f"ur Zahlen, Pfade,
Pens, Transformationsmatrizen usw.). Wenn das
Betriebssystem diesen Speicher nicht zur Verf"ugung stellen kann (wegen
residenter Programme, RAM-Disk o."a.), wird der R"uckgabewert~6
zur"uckgeliefert.
Wenn \mf\ jedoch w"ahrend der Arbeit feststellt, da"s einer der Bereiche
im internen Speicher zu klein ist (z.B. bei endlos rekursiven Makros, zu
vielen Strings, zu langen Zeilen, \dots), so
meldet es "`\verb|capacity exceeded|"' zusammen mit der Angabe, welcher
Bereich gesprengt wurde. In diesem Fall kann der Benutzer nur versuchen,
sparsamer mit den Ressourcen umzugehen (das sagt sich nat"urlich leicht,
aber es ist kaum m"oglich, hier konkretere Hinweise zu geben; ein paar Tips
kann man noch im \mf book\cite{mfbook} von Knuth finden). Im
"au"sersten Notfall kann man auch bei mir anfragen, ob es m"oglich ist,
den entsprechenden Bereich zu vergr"o"sern; das h"atte jedoch auf jeden
Fall eine "Anderung des Programmes zur Folge, so da"s man auf diese
M"oglichkeit nur zur"uckgreifen sollte, wenn man sich sicher ist, da"s
eine andere L"osung nicht m"oglich oder nicht vertretbar ist.

F"ur "`Insider"' sind in Tabelle~\ref{tab-konst} die Werte der wichtigsten
Konstanten von \mf\ angegeben, so wie sie in dieser Implementation
gew"ahlt wurden. Eine ausf"uhrliche Erkl"a"-rung dieser Variablen findet man
in~\cite{mfprog}.
\begin{table}[htbp]\begin{center}
\begin{tabular}{|l|l|r|}
   \hline
   main memory size     & {\it mem\_max = mem\_top}   & 65\,534  \\
                        & {\it mem\_min = mem\_bot}   & 0        \\
   number of internals  & {\it max\_internal}         & 100      \\
   buffer size          & {\it buf\_size}             & 2000     \\
   error messages       & {\it error\_line}           & 72       \\
                        & {\it half\_error\_line}     & 42       \\
   text output width    & {\it max\_print\_line}      & 79       \\
   graphics screen size & {\it screen\_width}         & variabel (640) \\
                        & {\it screen\_depth}         & variabel (400) \\
   input stack          & {\it stack\_size}           & 30       \\
   number of strings    & {\it max\_strings}          & 2\,500   \\
   string pool size     & {\it pool\_size}            & 40\,000  \\
                        & {\it string\_vacancies}     & 8\,000   \\
   GF file buffer       & {\it gf\_buf\_size}         & 800      \\
   file names           & {\it file\_name\_size}      & 250      \\
   TFM header words     & {\it header\_size}          & 100      \\
   ligature/kern steps  & {\it lig\_table\_size}      & 5000     \\
   distinct kern amounts& {\it max\_kerns}            & 500      \\
   {\bf fontdimen} parameters & {\it max\_font\_dimen}& 50       \\
   symbolic tokens      & {\it hash\_size}            & 2\,100   \\
   input files          & {\it max\_in\_open}         & 12       \\
   macro parameters     & {\it param\_size}           & 150      \\ \hline
\end{tabular}
\caption{\mf-Konstanten} \label{tab-konst}
\end{center}\end{table}

%
%***************************** INIMF ***************************************
%
\chapter{INIMF}\label{kap-inimf}

Auf der Programmdiskette befinden sich zwei unterschiedliche Versionen von \mf:
\file{METAFONT.PRG} und \file{INIMF.PRG}. Dabei ist ersteres f"ur die t"agliche
Arbeit gedacht; \inimf\ wird im allgemeinen nur zur Erzeugung von
Base-Dateien (\file{.BSE}) ben"otigt. Wer bereits die Format-Dateien
(\file{.FMT}) von \TeX\ kennt, kann den n"achsten Absatz "uberspringen, denn
die Base-Dateien bei \mf\ entsprechen genau den Format-Dateien bei \TeX.

Beim Programmstart m"ussen sehr viele Variablen initialisiert und der
sogenannte "`String-Pool"' (Datei \file{MF\_POOL}) mit allen
vordefinierten Strings eingelesen werden. Au"serdem wird fast jeder
Benutzer zumindest die Makros aus der Datei \file{PLAIN.MF} verwenden,
da die sogenannten "`pri\-mi\-tives"' -- also die Befehle des "`nackten"'
\mf\ ohne Plain-Makros -- so primitiv sind (wie der Name schon sagt),
da"s man sehr viel tippen m"u"ste, um nur ein paar einfache Sachen auf
den Bildschirm zu bringen, geschweige denn einen ganzen Zeichensatz.
Die "`pri\-mi\-tives"' k"onnte man auch als die "`Maschinensprache"' von
\mf\ bezeichnen. Wenn \mf\ bei jedem Programmstart erst diese ganzen
Initialisierungen ausf"uhren und Makrodefinitionen einlesen m"u"ste,
w"urde das recht lange dauern. Darum hat Knuth eine M"oglichkeit
vorgesehen, diese Initialisierungen und Definitionen nach einmaliger
Ausf"uhrung in kompakter Form auf Diskette bzw.\ Platte abzuspeichern.
Diese Datei wird Base-Datei genannt. Wenn man das einmal erledigt hat,
braucht das Programm in Zukunft nur noch die Base-Datei einzulesen, und
ist danach sofort startbereit.

Der Unterschied zwischen \inimf\ und \mf\ besteht im wesentlichen darin,
da"s bei \mf\ die komplette Variablen-Initialisierung und das Lesen des
String-Pools entfernt wurde, wodurch es nicht nur schneller, sondern auch
um einiges k"urzer als \inimf\ ist. Aus diesem Grund braucht es aber 
unbedingt eine Base-Datei, um arbeiten zu k"onnen. Und zur Erzeugung so
einer Base-Datei braucht man eben \inimf, auch deshalb, weil der Befehl
zum Schreiben der Base-Datei ({\tt dump}) im normalen \mf\ gar nicht
vorhanden ist.

Ein weiterer Unterschied besteht in der Berechnung einiger "`statistischer"'
Werte w"ahrend der Arbeit. Wenn man z.B. die Variable {\it tracingstats\/}
auf einen positiven Wert setzt, so erh"alt man am Ende der LOG-Datei einige
Informationen dar"uber, wie stark der interne Speicher ausgenutzt wurde.
Das Mitf"uhren und Aktualisieren solcher Zusatzinformationen kostet jedoch
Zeit und Speicherplatz, deshalb wurden die entsprechenden Code-Teile in
\file{METAFONT.PRG} entfernt. Wenn man diese Informationen ben"otigt,
mu"s man auf \inimf\ zur"uckgreifen, mu"s daf"ur aber etwas mehr Zeit
und Speicher einkalkulieren. An dieser Stelle sei nochmal betont, da"s
man im Prinzip auch mit \inimf\ allein ausk"ame; alles, was man mit \mf\
machen kann, funktioniert auch mit \inimf\ (vorausgesetzt, man hat gen"ugend
Speicher zur Verf"ugung). Insbesondere kann man auch bei \inimf\ eine
Base-Datei laden (z.B. durch Eingabe von `{\tt \&plain}' in der Startzeile).
Lediglich wenn man keine Base-Datei in der Startzeile angibt, l"adt \mf\
die in der Setup-Datei angegebene {\tt defaultbase}, w"ahrend \inimf\ in
diesem Fall gar keine Base-Datei l"adt, sondern nur seine Variablen
initialisiert und den String-Pool liest (nicht aber die Plain-Makros!).

Abschlie"send nochmal eine kurze Zusammenfassung der Besonderheiten von
\inimf:
\begin{itemize}
\item alle Variablen werden beim Programmstart initialisiert;
\item der String-Pool wird gelesen (der Dateiname steht in der Setup-Datei
   unter {\tt poolfile});
\item der Befehl {\tt dump} erzeugt eine Base-Datei;
\item wenn in der Startzeile keine Base-Datei angegeben wird, wird auch
   keine geladen;
\item es werden zus"atzliche Statistiken gef"uhrt. Diese erh"alt man,
%A5   wenn die Variable $\hbox{\it tracingstats\/}>0$ bzw.\ $\hbox{\it tracingedges\/}>1$;
   wenn $\hbox{\it tracingstats\/}>0$ bzw.\ $\hbox{\it tracingedges\/}>1$;
\item es wird mehr Hauptspeicher ben"otigt (f"ur zus"atzlichen Programmcode
   und die statistischen Informationen);
\item es wird mehr Rechenzeit "`verbraten"'.
\end{itemize}

%
%********************** Erste Schritte mit METAFONT ************************
%
\chapter{Erste Schritte mit \protect\mf}
\label{kap-erste}

"`Aller Anfang ist schwer"', noch dazu, wenn man so komplexe und flexible
Programme wie \TeX\ oder \mf\ vor sich hat. Um dem Anf"anger dennoch einen
ganz kleinen Ausschnitt der M"oglichkeiten von \mf\ zu zeigen und ihm
gleich am Anfang ein paar kleine Erfolgserlebnisse zu erm"oglichen, sind
in diesem Kapitel ein paar Beispiele aufgef"uhrt, die am besten gleich am
Rechner ausprobiert werden sollten. F"ur die ersten beiden Beispiele kann
\mf\ direkt von der Programmdiskette aus gestartet werden, das dritte
Beispiel ist am einfachsten mit einem fertig installierten \mf\
durchzuf"uhren. Bevor ich's vergesse: beenden kann man das Programm durch
Eingabe von `{\tt end}' oder `{\tt bye}', genauso wie \TeX\ also (wenn
man mal davon absieht, da"s man in \mf\ kein `\bs' vor die Befehle setzen
mu"s).

%
%-------------------- Beispiel 1: einfache Grafik --------------------------
%
\section{Beispiel 1: einfache Grafik}
Im ersten Beispiel sollen ein paar Pinselstriche auf den Bildschirm gebracht
werden. Zun"achst mu"s \mf\ gestartet werden, z.B. durch Anklicken von
\file{METAFONT.PRG} auf dem Desktop (keine Angst, ich erkl"are jetzt nicht,
wie man mit \gem\ umgeht). Nach der "ublichen Titelzeile meldet sich das
Programm mit zwei Sternchen. Normalerweise kann man hier angeben, welchen
Zeichensatz man erzeugen m"ochte, und noch viele andere Dinge. F"ur dieses
Beispiel jedoch kann sich \mf\ "`ganz entspannt zur"ucklehnen"' und auf
die Eingabe warten, also tippt man
\begin{verbatim}
   \ relax
\end{verbatim}
ein. Zun"achst mu"s \mf\ mitgeteilt werden, da"s man die gezeichneten
Striche gleich auf dem Bildschirm sehen m"ochte. Dies erreicht man durch
Eingabe von
\begin{verbatim}
   screenstrokes;
\end{verbatim}
(den Strichpunkt nicht vergessen!).
Zum Zeichnen einer Linie ist die Angabe von zwei Punkten n"otig, wobei
die Koordinaten eines Punktes als {\tt (x,y)} eingegeben werden k"onnen:
\begin{verbatim}
   draw (10,10)..(50,30);
\end{verbatim}
Wenn man mehr als zwei Punkte angibt, wird eine Kurve durch alle Punkte
gezogen (sogenannte Bezier-Kurven), z.B.
\begin{verbatim}
   draw (10, 100)..(50,80)..(90,100);
\end{verbatim}
Das ist nat"urlich nur die einfachste Methode, zwei oder mehr Punkte mit
einer Kurve zu verbinden. \mf\ kann noch sehr viel mehr, z.B. kann man
f"ur bestimmte Punkte der Kurve eine Richtung vorgeben, mit
"`Kontrollpunkten"' die Form der Kurve fast beliebig ver"andern,
Schnittpunkte mit anderen Kurven definieren usw.
Experimentieren kann man auch mit speziellen Verbindungen, indem man die
zwei Punkte `..' durch `...' oder `-{}-' ersetzt. Um das Grafikfenster zu
l"oschen, kann man
\begin{verbatim}
   clearit; showit;
\end{verbatim}
eingeben. \verb|clearit| l"oscht dabei den Bildpuffer, \verb|showit| bringt
den gel"oschten Puffer dann auf den Bildschirm.

%
%-------------- Beispiel 2: METAFONT als ,,Rechner'' ------------------
%
\section{Beispiel 2: \protect\mf\ als "`Rechner"'}

Im zweiten Beispiel sollen die mathematischen F"ahigkeiten von \mf\ etwas
ausprobiert werden. Zun"achst kann man in \mf\ (wie in fast jeder anderen
Programmiersprache auch) Variablen definieren. Man h"atte das erste Beispiel
auch so eingeben k"onnen:
\begin{verbatim}
   x1 = 10;  y1 = 10;  x2 = 50;  y2 = 30;
   draw (x1, y1)..(x2, y2);
\end{verbatim}
Dabei steht das Gleichheitszeichen nicht f"ur eine Zuweisung, sondern f"ur
eine Gleichung. Der Unterschied wird klar, wenn man z.B. den Wert von $x1$
um eins erh"ohen will. Schreibt man
\begin{verbatim}
   x1 = x1 + 1;
\end{verbatim}
so beschwert sich \mf\ zu Recht, da"s diese Gleichung "`inkonsistent"'
(d.h.\ nicht l"osbar) ist, denn es gibt nun mal keine reelle Zahl, deren
Wert bei Addition von eins unver"andert bleibt. Will man eine Zuweisung
erreichen, mu"s man `:=' eingeben. Richtig w"are also in diesem Fall:
\begin{verbatim}
   x1 := x1 + 1;
\end{verbatim}
Interessanter ist aber wohl die Verwendung von Gleichungen. Lineare
Gleichungssysteme sind f"ur \mf\ was ganz allt"agliches. Man h"atte die
obigen Werte also auch so definieren k"onnen:
\begin{verbatim}
    x1 +  x2 = 60;
   3x1 + 2x2 = 130;
\end{verbatim}
Man kann leicht nachpr"ufen, da"s \mf\ dieses Gleichungssystem korrekt
gel"ost hat, wenn man
\begin{verbatim}
   show x1, x2;
\end{verbatim}
eingibt.
Interessant ist auch, da"s man nicht `{\tt 3$*$x1}' schreiben mu"s,
sondern den Malpunkt einfach weglassen kann, so wie es wohl (nicht nur)
jeder Mathematiker gewohnt ist. Es gibt nur sehr wenige andere
Programmiersprachen, in denen solche Selbstverst"andlichkeiten m"oglich sind.
Es bedarf wohl keiner besonderen Erw"ahnung, da"s f"ur \mf\ auch die
Rechenregel "`Punkt vor Strich"' nichts Unbekanntes ist. Ansonsten bietet
\mf\ unter anderem noch trigonometrische Funktionen, approximative (d.h.\
n"aherungsweise) L"osung von nichtlinearen Gleichungssystemen, Vektor-
und Matrizenrechnung. Durch die M"oglichkeit, Makros zu definieren (was
im Prinzip den Unterprogrammen oder Prozeduren herk"ommlicher
Programmiersprachen entspricht), kann man nat"urlich noch beliebig viele
andere mathematische Rechenverfahren implementieren.

Wer mehr "uber \mf\ erfahren m"ochte, sollte sich eines der im
Literaturverzeichnis genannten B"ucher zu Gem"ute f"uhren. Auch das genaue
Studium fertiger Zeichens"atze oder Logos ist wichtig, anfangen sollte man
mit einfacheren Dingen wie z.B. das \mf-Logo im Verzeichnis \file{MF\_LOGO}
oder das DFF-Logo von J"urgen~E.~G"unther, \file{dff.mf}. Auch die vielen
anderen kleinen Beispiele im \file{inputs}-Ordner sind in der Regel
relativ gut verst"andlich. An das Studium der CMR-Zeichens"atze sollte man
sich erst sp"ater heranwagen, denn diese Zeichens"atze sind in einem
Zeitraum von etlichen Jahren immer wieder verbessert und verfeinert worden,
so da"s der Blick meistens durch viele Details verstellt wird.

%
%-------------- Beispiel 3: Erzeugung eines Zeichensatzes ------------------
%
\section{Beispiel 3: Erzeugung eines Zeichensatzes}
Zum Schlu"s dieses Kapitels soll noch erkl"art werden, wie man mit \mf\
komplette "`Computer Modern Roman"' Zeichens"atze erzeugen kann. Das ist
wahrscheinlich eine der h"aufigsten Aufgaben dieses Programmes, schlie"slich
wollen (und k"onnen) nicht alle Benutzer ihre eigenen Zeichen entwerfen,
darum greift man in der Regel auf die fertigen Zeichens"atze von Knuth
zur"uck, die ja auch eine lange Entwicklungszeit hinter sich haben und
deshalb wenigstens halbwegs professionell aussehen (dennoch hat Knuth nie
behauptet, ein Typograph zu sein, er hat sich aber bei der Entwicklung der
Zeichens"atze von einigen Experten dieses Faches beraten lassen).

Als erstes sollte man nachschauen, ob in der Datei \file{ATARI.MF} ein
`mode\_def' f"ur den verwendeten Drucker vorhanden ist und wie dieser
hei"st. Wenn dort der gew"unschte Dru"cker nicht angegeben ist, sollte
man nach einem `mode\_def' suchen, dessen Auf"|l"osung der ge"-w"unsch"-ten
m"oglichst nahe kommt oder gleich ist. In diesem Fall wird man wohl fr"uher
oder sp"ater nicht darum herum kommen, sich einen eigenen Parametersatz zu
definieren. Vorher sollte man aber bei mir oder Stefan Lindner anrufen,
ob vielleicht inzwischen schon fertige Parameter existieren, es kommen fast
t"aglich neue hinzu.

Als Beispiel soll hier der Zeichensatz `{\tt cmr10}' in 1,44-facher
Vergr"o"serung f"ur einen Laserdrucker erzeugt werden, soda"s er in einem
\TeX-Dokument mit
\begin{verbatim}
   \font\bigtenrm = cmr10 scaled \magstep2
\end{verbatim}
angesprochen werden kann. Zum "Uben oder schnellen Ausprobieren kann man
alternativ auch einen kleinen Zeichensatz wie `{\tt logo10}' erzeugen,
dazu mu"s im folgenden Text nur {\tt cmr} durch {\tt logo} ersetzt werden.

\subsection{Erzeugen der Base-Datei}
Zun"achst mu"s man daf"ur sorgen, da"s eine geeignete Base-Datei vorhanden
ist. F"ur dieses Beispiel gen"ugen die Plain-Makros, also wird die Datei
\file{PLAIN.BSE} ben"otigt. Es ist zwar auf der Programmdiskette schon eine
fertige Datei vorhanden, dennoch soll hier kurz erl"autert werden, wie diese
Datei erzeugt wurde (schlie"slich fallen solche Dateien ja nur "au"serst
selten vom Himmel).

Wie in Kapitel~\ref{kap-inimf} bereits erw"ahnt wurde, ben"otigt man
f"ur diese Aufgabe das Programm \inimf. Man startet also \file{INIMF.PRG}
und gibt in der Startzeile (durch `$**$' gekennzeichnet)
\begin{verbatim}
   plain
\end{verbatim}
ein. Daraufhin werden die Plain-Makros geladen und im Speicher abgelegt.
Wenn wieder ein `$*$' erscheint, ist \mf\ zu weiteren Untaten bereit.
Jetzt kann man die eigenen Dateien laden, die damit bei jedem Start von
\mf\ automatisch mitgeladen werden. F"ur den Anfang also mal
\begin{verbatim}
   input atari
\end{verbatim}
um einige Werte wie Auf"|l"osung, Strichst"arke etc.\ f"ur ein paar "ubliche
Ausgabeger"ate (z.B. {\tt stscreen}, {\tt stlaser} und {\tt starnl}) zu
definieren.
F"ur den Anfang gen"ugt das mal, man kann \inimf\ mitteilen, da"s
es nun seinen Speicher "`dumpen"' soll:
\begin{verbatim}
   dump
\end{verbatim}
Zur Belohnung erh"alt man ein paar neue Dateien:
\begin{description}
\item[\file{PLAIN.BSE}]  in dem Ordner, der in der Setup-Datei unter
   {\tt dumppath} angegeben wurde. Das ist die Base-Datei, in der alle
   wichtigen Daten f"ur \file{METAFONT.PRG} enthalten sind.
\item[\file{PLAIN.LOG}]  im {\tt logpath}-Ordner. In diese Datei hat \inimf\
   s"amtliche Bild"-schirm-Aus"-ga"-ben und noch einiges mehr mitprotokolliert,
   damit man sich auch sp"ater noch ansehen kann, was das Programm alles
   angestellt hat.
\end{description}

\subsection{Die Startzeile}
Diese Base-Datei kann man nun mit jedem der beiden Programme (\inimf\
und \mf) ruckzuck einladen, indem man in die Startzeile
\begin{verbatim}
   &plain
\end{verbatim}
(man beachte das `\verb|&|'!) eintippt. Dadurch wird die Datei
\file{PLAIN.BSE} geladen, und man hat alles wieder so, wie es vor dem
Eintippen von \verb|dump| war.

Jetzt wird es aber doch allerh"ochste Zeit, da"s genau erkl"art wird, was
die Startzeile ist, und welche Besonderheiten sie aufweist. Die Startzeile
ist die erste Zeile, die man f"ur \mf\ eingibt. Eine M"oglichkeit besteht
bereits in der Kommandozeile {\em nach\/} den Optionen. Wenn dort nichts
eingegeben wurde, meldet sich das Programm mit zwei Sternchen (`$**$') am
Zeilenanfang, um anzudeuten, da"s es die Startzeile erwartet (in den
normalen Zeilen steht nur {\em ein\/} Sternchen am Zeilenanfang). In dieser
Startzeile mu"s nun angegeben werden, welche Base-Datei geladen werden soll
(bei \inimf\ optional), au"serdem leitet \mf\ aus dieser Zeile den
"`Jobname"' ab, nach dem s"amtliche Ausgabedateien (GF-, TFM- und LOG-Datei)
benannt werden. Die Besonderheiten der Startzeile sind:
\begin{itemize}
\item Eine Base-Datei l"a"st sich durch Voranstellen eines `{\tt \&}' vor dem
   Dateinamen laden (z.B. `{\tt \&plain}' l"adt die Base-Datei
   `\file{PLAIN.BSE}'). Wenn eine Base-Datei angegeben ist, mu"s diese
   auf jeden Fall am Anfang der Startzeile stehen.
\item Eingabedateien (\verb|*|\file{.MF}) kann man einfach durch Angabe des
   Datei"-namens laden, w"ah"-rend man in den normalen \mf-Eingabezeilen
   `{\tt input \it name\/}' schreiben m"usste (z.B. `{\tt cmr10}' l"adt die
   Eingabedatei `\file{CMR10.MF}').
\item Wenn man in dieser Zeile andere Sachen eingeben m"ochte, z.B.
   Initialisierungen irgendwelcher Variablen, bevor eine Datei gelesen
   wird, mu"s man mit einem `\verb|\|' auf den normalen
   Eingabemodus umschalten. Danach kann man alles machen, was man
   normalerweise (in `\verb|*|\file{.MF}'-Eingabedateien oder in Zeilen mit nur
   einem `$*$' am Anfang) machen kann. "Ublicherweise gibt man hier das
   Ausgabeger"at und eventuelle Vergr"o"serungen an, z.B.
   \begin{verbatim}
   \ mode=stlaser; mag=1.44;
\end{verbatim}
   setzt Auf"|l"osung etc.\ auf die Werte, die im `{\tt mode\_def stlaser}'
   in der Datei \file{ATARI.MF} angegeben wurden, und vergr"o"sert den
   Zeichensatz auf 1.44-fache Gr"o"se. Will man mit diesen Werten einen
   Zeichensatz erzeugen, so m"ussen die Zuweisungen nat"urlich {\em vor\/}
   dem Laden der Source\-datei ausgef"uhrt werden (es n"utzt nichts, wenn
   \mf\ zuerst den ganzen Zeichensatz erzeugt und erst hinterher erf"ahrt,
   da"s dieser vergr"o"sert werden sollte). Da man nach Eingabe
   des \verb|\| nicht mehr im "`Startzeilen-Modus"' ist, mu"s man die
   Sourcedatei nun (wie "ublich) mit \verb|input| laden.
\item Anhand der Startzeile bestimmt \mf\ den Jobnamen. Dabei richtet sich
   \mf\ nach der ersten Datei, die eingelesen wird (ohne Beachtung einer
   eventuell angegebenen Base-Datei), also entweder der erste Dateiname
   ohne einem `{\tt \&}' davor, oder (falls vor dem `\verb|\|' keine
   {\tt MF}-Datei eingelesen wird) die erste Datei, die nach einem
   `\verb|\|' mit {\tt input} eingelesen wird. Wenn mit den Kommandos
   in dieser Zeile "uberhaupt keine \file{MF}-Datei eingelesen wird, 
   dann setzt \mf\ den Jobname auf `\file{MFPUT}'. Wenn man also
\begin{verbatim}
   &plain f1 \ input f2
   input f3
\end{verbatim}
   eingibt, hei"sen die Ausgabedateien `\file{F1.}xxx\file{GF}',
   `\file{F1.LOG}' und `\file{F1.TFM}', weil `\file{F1.MF}' die erste Datei
   ist, die gelesen wird (die Base-Datei wird nicht mitgerechnet, sonst
   hie"se ja alles `\file{PLAIN.}xxx').
\end{itemize}
Wenn man in der ersten Zeile kein Ausgabeger"at spezifiziert, dann verwendet
\mf\ `\verb|mode = proof;|', was zwar zum Ausprobieren ganz nett aussieht
(eigentlich sollte sich dieses Schauspiel niemand entgehen lassen, man sieht
die Zeichen mal richtig gro"s und in hervorragender Sch"arfe auf dem Monitor),
aber f"ur einen Ger"atetreiber in der Regel nicht so ideal ist (schon allein
wegen der Auf"|l"osung von 2601.72 dpi). Also mu"s man das gew"unschte Ger"at
explizit angeben, indem man in der ersten Zeile vor dem Namen der
Eingabedatei `{\tt mode=stlaser;}' angibt. Damit nun aber \mf\ nicht nach
der Eingabedatei `{\tt mode}' sucht, ist vor der Gleichung noch ein
`\verb|\|' n"otig. Wenn keine Vergr"o"serung angegeben wird, ist sie
automatisch 1. Allgemein wird die erste Zeile also ungef"ahr so aussehen:
\begin{verbatim}
   &<Base> \ mode=<Geraet>; mag=<Vergroesserung>; input <Datei>;
\end{verbatim}
wobei f"ur die Namen in spitzen Klammern entsprechende Werte einzusetzen
sind (die Klammern tippt man nat"urlich nicht mit ein).

\subsection{Die "`Sch"opfung"'}
Jetzt steht alles bereit, um den Zeichensatz zu erzeugen. Man starte also
das Programm \file{METAFONT.PRG} und gebe als Startzeile
\begin{verbatim}
   &plain \ mode=stlaser; mag=1.44; input cmr10
\end{verbatim}
ein. Nach einigen Minuten ist \mf\ fertig, und man hat ein paar weitere
Dateien auf der Diskette / Platte:
\begin{description}
\item[\bfile{CMR10.432}] sollte eigentlich \file{CMR10.432GF} hei"sen, aber
   \tos\ kann
   halt leider nur drei Zeichen in der Extension speichern. Die "`krumme"'
   Zahl 432 erh"alt man, wenn man die Ger"ate-Auf"|l"osung von 300 dpi
   (dots per inch) mit der Vergr"o"serung (in diesem Fall 1.44)
   multipliziert. Das ist also nun die GF-Datei, in der die Beschreibung
   der vielen Zeichen drin ist. Wenn man einen Zeichensatz f"ur ein anderes
   Ger"at generiert hat, steht nat"urlich nicht 432, sondern die gew"ahlte
   Auf"|l"osung (Vergr"o"serung nicht zu vergessen) in der Extension,
   z.B. \file{CMR10.96G} (`\file{.96GF}' auf 3 Zeichen verk"urzt!) f"ur eine
   GF-Datei mit 96 dpi und Vergr"o"serung 1.
\item[\bfile{CMR10.LOG}] auch hier hat \mf\ wieder fein s"auberlich
   mitprotokolliert, was es alles gemacht hat.
\item[\bfile{CMR10.TFM}] diese Datei ben"otigt \TeX, um zu erfahren, wie
   gro"s die einzelnen Zeichen sind (wie sie tats"achlich aussehen,
   interessiert \TeX\ gar nicht, das geht einzig und allein den
   Druckertreiber etwas an). TFM steht f"ur "`\TeX\ Font Metric File"'.
\end{description}

Da die meisten Ger"atetreiber sogenannte PK-Files ("`Packed Font Files"')
bevorzugen, mu"s man nun noch die GF-Datei in eine PK-Datei umwandeln
(man k"onnte auch komprimieren sagen). Man startet also \file{GFTOPK.TTP}
und gibt diesem den Namen der GF-Datei und der gew"unschten PK-Datei,
also z.B.
\begin{verbatim}
   cmr10.432 \prtfonts\res300.slm\mag____1.440\cmr10.pk
\end{verbatim}
als Kommandozeile mit auf den Weg (zum Zwecke der Demonstration sei hier
mal davon ausgegangen, da"s die GF-Datei im aktuellen Ordner und
die Zeichens"atze f"ur die Druckertreiber im Ordner \verb|\prtfonts|
stehen, wobei letzterer entsprechend den Konventionen von Stefan Lindner's
Druckertreiber-Familie aufgebaut ist). Damit ist der Zeichensatz fertig und steht
zum Ausdrucken bzw.~Betrachten auf dem Bildschirm bereit.

%
%**************************** Zukunftsmusik ********************************
%
\chapter{Zukunftsmusik}
Die Arbeit an \mf\ ist noch nicht abgeschlossen, da gibt es noch
viel zu viele Ideen, was man besser und sch"oner machen k"onnte, und
der eine oder andere Fehler l"a"st sich vermutlich auch noch in
der Benutzeroberfl"ache finden. Sogar im \mf\ selbst kann man heute
noch Fehler finden, man versuche nur mal, in einer Feld-, Wald- und
Wiesen-Implementation das \inimf\ zu starten, keine Base-Datei zu
laden, und \verb|\showstats| einzugeben. In 90\% aller Versionen
(nat"urlich nicht in dieser) wird man "`{\tt Memory usage 23\&-1}"'
zur Antwort bekommen. Und $-1$ verbrauchte Speicherzellen ist
schon etwas ungew"ohnlich (keine Sorge, der Fehler ist inzwischen
an den "`Chef"' weitergegeben).

Da"s bei der Texteingabe kein Cursor zu sehen ist, st"ort manchmal schon
gewaltig. Irgendwann wird auch das sicherlich in den Griff zu bekommen
sein. Die Gedanken kreisen da allerdings viel weiter: wenn man die
Eingabe "uber allgemeine Textfenster (wie sie heutzutage in jeder
besseren grafischen Benutzeroberfl"ache enthalten sind, z.B. in X oder
in SunView) gestalten w"urde, h"atte man enorm viel mehr M"oglichkeiten,
angefangen bei einfachen Editorkommandos (Cursor-Bewegung, Zeichen l"oschen)
bis hin zu Cut/Paste-Operationen "uber mehrere Fenster (und damit mehrere
Dateien) hinweg. Eventuell k"onnte man das auch "uber h"ohere XACC-Levels
in Zusammenhang mit einem einfachen Accessory-Editor, der auch das XACC-%
Protokoll versteht, erledigen. Wer einen solchen Editor kennt, der noch
dazu frei kopierbar sein sollte (PD- oder Shareware), m"oge mich bitte
gleich benachrichtigen.

Sch"on w"are es auch, wenn man die Setup-Datei von \mf\ aus "andern k"onnte.
Ich stelle mir da einen Eintrag in der Men"uleiste vor, "ahnlich wie bei
vielen anderen \gem-Programmen, wo man die Standard-Pfade angeben und
anschlie"send abspeichern kann.

Wenn die Larc-Bibliothek mal ausgereift ist, dann wird sicherlich
auch in \mf\ die Behandlung der archivierten Dateien konsistenter
und nat"urlicher werden. Letzten Endes ist ein Larc-Archiv ja
nichts anderes als ein Directory, komplett mit Unterverzeichnissen
und Dateien, und so sollte auch der Benutzer keinen Unterschied
machen m"ussen (leider l"a"st sich das nicht so einfach auf den
Desktop ausweiten, denn da mu"s der Benutzer immer noch selbst
die entsprechenden Archivier-Programme aufrufen, anstatt sie wie
normale Directories "uber Desktop-Fenster zu behandeln). In diesem
Zusammenhang ist auch nicht einzusehen, warum \mf\ keine mit Pfad
abgespeicherten Dateien in den Archiven duldet.

Ein sicher sehr interessantes, aber auch aufwendiges Projekt w"are, \mf\
mit der hervorragenden Benutzeroberfl"ache von {\mc SMALLTALK-80}
zu verbinden. Ein erster Ansatzpunkt dazu ist die M"oglichkeit, C-Funktionen
als "`primitive"' Methoden zu {\mc SMALLTALK-80} dazulinken zu k"onnen
(und im Prinzip ist \mf\ nichts anderes als eine C-Funktion namens
{\tt main}). Benutzern mit weniger als 4 MByte RAM w"urde das allerdings
vermutlich nicht sehr viel bringen (h"ochstens den Wunsch nach mehr
Speicher).

%
%
%
\begin{thebibliography}{9}

\bibitem{mfbook}
   Knuth, Donald E. {\it The \mf book}, Computers and Typesetting Vol.~C,
   Addison-Wesley, Reading (Massachussets) 1986. 361 Seiten.

Die definitive Anleitung zu \mf. Auf dieses Buch kann wohl nur
verzichten, wer ausschlie"slich "`Computer Modern Roman"'-Zeichens"atze
f"ur verschiedene Ausgabeger"ate erzeugt.  Wer mit den Parametern etwas
experimentieren will oder eigene Grafiken oder gar Zeichens"atze
erzeugen will, sollte sich das \mf book zulegen, denn da steht
praktisch alles drin, was der Benutzer wissen mu"s.

\bibitem{mfprog}
   Knuth, Donald E. {\it \mf: The Program}, Computers and Typesetting
   Vol.~D, Addison-Wesley, Reading (Massachussets) 1986. 560 Seiten.

Wer es ganz genau wissen will, kann hier den Original-Sourcecode in
{\mc WEB} nachlesen. Dieses Buch ist die Grundlage meiner C-Version von
\mf.

\bibitem{texprog}
   Knuth, Donald E. {\it \TeX: The Program}, Computers and Typesetting
   Vol.~B, Addison-Wesley, Reading (Massachussets) 1984. 594 Seiten.

Der Sourcecode von \TeX\ f"ur alle, die auch dort hinter die Kulissen
schauen wollen. Ebenfalls in der Programmier- und Dokumentationssprache
{\mc WEB} geschrieben.

\bibitem{cm-typefaces}
   Knuth, Donald E. {\it Computer Modern Typefaces}, Computers and
   Typesetting Vol.~E, Addison-Wesley, Reading (Massachussets) 1986.
   590 Seiten.

Hier sind die ganzen \mf-Programme f"ur die komplette Computer Modern
Schriftenfamilie dokumentiert, zusammen mit vielen Probeausdr"ucken (proofs).
Man kann dieses Buch also als Nachschlagewerk, als Bilderbuch oder auch als
Lehrbuch f"ur beispielhafte \mf-Programmierung ansehen.

\bibitem{web}
   Knuth, Donald E. {\it The WEB System of Structured Documentation},
   Stanford Computer Science Report No.\ 980, Stanford University,
   Department of Computer Science, Stanford (California) 1983. 206 Seiten.

Anleitung zu {\mc WEB} und Sourcecode zu {\mc WEAVE} und {\mc TANGLE}, die
zusammen das {\mc WEB}-System bilden.

\bibitem{pandora}
   Billawala, Nazneen N. {\it Metamarks: Preliminary studies for a
   Pandora's Box of shapes}, Stanford Computer Science Report No.~1256,
   Stanford University, Department of Computer Science, Stanford
   (California) 1989. Erh"altlich von der \TeX\ Users Group.

Das Buch zu den Pandora-Fonts. Dieses Buch ist {\bf keine} Einf"uhrung
in \mf, sondern mehr ein Bilderbuch, das die Ergebnisse einiger
Experimente mit \mf\ zeigt. Das Herausragende an den Pandora-Fonts ist,
da"s sie von Anfang an f"ur und vor allem mit \mf\ entwickelt und nicht
wie die meisten anderen Zeichens"atze (cmr eingeschlossen) erst
nachtr"aglich f"ur \mf\ zurechtgebogen wurden. Wer die Pandora-Fonts
genauer studieren will, findet in diesem Buch einige Hinweise und die
grundlegenden Elemente (Serifen, Kreise, B"ogen, Bowls), aus denen die
Zeichen aufgebaut sind. Den Hauptteil des Buches machen
Parametervariationen und ihre Auswirkungen auf das Aussehen der
Zeichenelemente aus.

\bibitem{kopka90}
   Kopka, Helmut. {\it \LaTeX\ -- Erweiterungsm"oglichkeiten},
   2. Aufl., Addison-Wesley, Bonn 1991.

Obwohl es in diesem Buch haupts"achlich um \LaTeX\ geht, enth"alt es
auch eine knapp hundertseitige Kurzeinf"uhrung in \mf. Momentan ist dies
das einzige deutsche Buch, das \mf\ behandelt. Angefangen bei den
einzelnen Elementen des \mf-Systems (Programm-Umgebung) "uber die
wichtigsten Grundlagen von \mf\ und seiner Programmiersprache bis
hin zur Erzeugung eines Firmenlogos vermittelt Kopka das n"otige
Wissen, um fertige \mf-Programme in ihrer Grundstruktur erfassen
und eigene kleinere Arbeiten selbst erledigen zu k"onnen. Die ideale
Vorbereitung f"ur das Werk des "`Meisters"', das \mf book.
\end{thebibliography}

\end{document}
